Spec-Zone.ru › OpenJDK 8

Класс CharsetEncoder

  • java.lang.Object
    • java.nio.charset.CharsetEncoder

public abstract class CharsetEncoder
extends Object

Двигатель, который может преобразовать последовательность символов Юникод в последовательность байтов в заданной кодировке.

Последовательность входных символов предоставляется в буфере символов или в серии таких буферов. Последовательность выходных байтов записывается в буфер байтов или в серию таких буферов. Кодировщик всегда должен использоваться, выполняя следующую последовательность вызовов методов, далее называемых операцией кодирования:

  1. Сбросить кодировщик с помощью метода reset, если он не использовался ранее;

  2. Вызвать метод encode ноль или более раз, пока доступен дополнительный вход, передавая false для аргумента endOfInput и заполняя буфер ввода и сбрасывая буфер вывода между вызовами;

  3. Вызвать метод encode один раз, передавая true для аргумента endOfInput; и затем

  4. Вызвать метод flush, чтобы кодировщик мог сбросить любое внутреннее состояние в буфер вывода.

Каждый вызов метода encode закодирует как можно больше символов из буфера ввода, записывая полученные байты в буфер вывода. Метод encode возвращается, когда требуется дополнительный вход, когда в буфере вывода недостаточно места или произошла ошибка кодирования. В каждом случае возвращается объект CoderResult, чтобы описать причину завершения. Вызывающий код может проверить этот объект, заполнить буфер ввода, сбросить буфер вывода или попытаться восстановиться от ошибки кодирования, как это необходимо, и повторить попытку.

Существует два основных типа ошибок кодирования. Если последовательность входных символов не является допустимой последовательностью символов Юникод, то вход считается неправильным. Если последовательность входных символов допустима, но не может быть отображена в допустимую последовательность байтов в заданной кодировке, то была обнаружена неотображаемый символ.

Обработка ошибки кодирования зависит от действия, запрошенного для данного типа ошибки, которое описывается экземпляром класса CodingErrorAction. Возможные действия при ошибках: проигнорировать ошибочный вход, сообщить об ошибке вызывающему коду через возвращаемый объект CoderResult или заменить ошибочный вход текущим значением массива байтов замены. Значение замены по умолчанию устанавливается для кодировщика, который часто (но не всегда) имеет начальное значение { (byte)'?' }; его значение можно изменить с помощью метода replaceWith.

По умолчанию действия при ошибках неправильного ввода и неотображаемых символов — сообщить о них. Действие при ошибке неправильного ввода можно изменить с помощью метода onMalformedInput; действие при ошибке неотображаемого символа можно изменить с помощью метода onUnmappableCharacter.

Этот класс предназначен для обработки многих деталей процесса кодирования, включая реализацию действий при ошибках. Кодировщику для определенной кодировки, который является конкретным подклассом этого класса, необходимо только реализовать абстрактный метод encodeLoop, который обобщает основной цикл кодирования. Подкласс, который сохраняет внутреннее состояние, должен дополнительно переопределить методы implFlush и implReset.

Экземпляры этого класса не безопасны для использования в нескольких потоках одновременно.

С момента:
1.4
См. также:
ByteBuffer, CharBuffer, Charset, CharsetDecoder

Конструкторы

Модификатор Конструктор и описание
protected CharsetEncoder(Charset cs, float averageBytesPerChar, float maxBytesPerChar)

Инициализирует новый кодировщик.

protected CharsetEncoder(Charset cs, float averageBytesPerChar, float maxBytesPerChar, byte[] replacement)

Инициализирует новый кодировщик.

Методы

Модификатор и тип Метод и описание
float averageBytesPerChar()

Возвращает среднее количество байтов, которое будет произведено для каждого символа входных данных.

boolean canEncode(char c)

Указывает, может ли этот кодировщик закодировать указанный символ.

boolean canEncode(CharSequence cs)

Указывает, может ли этот кодировщик закодировать заданную последовательность символов.

Charset charset()

Возвращает кодировку, которая создала этот кодировщик.

ByteBuffer encode(CharBuffer in)

Удобный метод, который кодирует оставшееся содержимое одного входного буфера символов в новый буфер байтов.

CoderResult encode(CharBuffer in, ByteBuffer out, boolean endOfInput)

Кодирует как можно больше символов из данного буфера ввода, записывая результаты в данный буфер вывода.

protected abstract CoderResult encodeLoop(CharBuffer in, ByteBuffer out)

Кодирует один или несколько символов в один или несколько байтов.

CoderResult flush(ByteBuffer out)

Сбрасывает этот кодировщик.

protected CoderResult implFlush(ByteBuffer out)

Сбрасывает этот кодировщик.

protected void implOnMalformedInput(CodingErrorAction newAction)

Сообщает об изменении действия этого кодировщика для ошибок неправильного ввода.

protected void implOnUnmappableCharacter(CodingErrorAction newAction)

Сообщает об изменении действия этого кодировщика для ошибок неотображаемых символов.

protected void implReplaceWith(byte[] newReplacement)

Сообщает об изменении значения замены этого кодировщика.

protected void implReset()

Сбрасывает этот кодировщик, очищая любое состояние, специфичное для кодировки.

boolean isLegalReplacement(byte[] repl)

Указывает, является ли заданный массив байтов допустимым значением замены для этого кодировщика.

CodingErrorAction malformedInputAction()

Возвращает текущее действие этого кодировщика для ошибок неправильного ввода.

float maxBytesPerChar()

Возвращает максимальное количество байтов, которое будет произведено для каждого символа входных данных.

CharsetEncoder onMalformedInput(CodingErrorAction newAction)

Изменяет действие этого кодировщика для ошибок неправильного ввода.

CharsetEncoder onUnmappableCharacter(CodingErrorAction newAction)

Изменяет действие этого кодировщика для ошибок неотображаемых символов.

byte[] replacement()

Возвращает значение замены этого кодировщика.

CharsetEncoder replaceWith(byte[] newReplacement)

Изменяет значение замены этого кодировщика.

CharsetEncoder reset()

Сбрасывает этот кодировщик, очищая любое внутреннее состояние.

CodingErrorAction unmappableCharacterAction()

Возвращает текущее действие этого кодировщика для ошибок неотображаемых символов.

Методы, унаследованные от класса java.lang.Object

clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait

Конструкторы

CharsetEncoder

protected CharsetEncoder(Charset cs,
                         float averageBytesPerChar,
                         float maxBytesPerChar,
                         byte[] replacement)

Инициализирует новый кодировщик. Новый кодировщик будет иметь заданные значения байтов на символ и замены.

Параметры:
cs - Кодировка, создавшая этот кодировщик
averageBytesPerChar - Положительное значение с плавающей точкой, указывающее ожидаемое количество байтов, которое будет произведено для каждого входного символа
maxBytesPerChar - Положительное значение с плавающей точкой, указывающее максимальное количество байтов, которое будет произведено для каждого входного символа
replacement - Начальное значение замены; не должно быть null, должно иметь ненулевую длину, не должно быть длиннее maxBytesPerChar и должно быть валидным
Исключения:
IllegalArgumentException - Если условия на параметрах не выполняются

CharsetEncoder

protected CharsetEncoder(Charset cs,
                         float averageBytesPerChar,
                         float maxBytesPerChar)

Инициализирует новый кодировщик. Новый кодировщик будет иметь заданные значения байтов на символ, а значение замены будет равно массиву байтов { (byte)'?' }.

Параметры:
cs - Кодировка, создавшая этот кодировщик
averageBytesPerChar - Положительное значение с плавающей точкой, указывающее ожидаемое количество байтов, которое будет произведено для каждого входного символа
maxBytesPerChar - Положительное значение с плавающей точкой, указывающее максимальное количество байтов, которое будет произведено для каждого входного символа
Исключения:
IllegalArgumentException - Если условия на параметрах не выполняются

Методы

charset

public final Charset charset()

Возвращает кодировку, создавшую этот кодировщик.

Возвращает:
Кодировка этого кодировщика

replacement

public final byte[] replacement()

Возвращает значение замены этого кодировщика.

Возвращает:
Текущее значение замены кодировщика, которое никогда не null и никогда не пустое

replaceWith

public final CharsetEncoder replaceWith(byte[] newReplacement)

Изменяет значение замены этого кодировщика.

Этот метод вызывает метод implReplaceWith, передавая новую замену после проверки, что новая замена приемлема.

Параметры:
newReplacement - Значение замены Новое значение замены; не должно быть null, должно иметь ненулевую длину, не должно быть длиннее значения, возвращаемого методом maxBytesPerChar, и должно быть legal
Возвращает:
Этот кодировщик
Исключения:
IllegalArgumentException - Если условия на параметре не выполняются

implReplaceWith

protected void implReplaceWith(byte[] newReplacement)

Сообщает об изменении значения замены этого кодировщика.

Реализация по умолчанию этого метода ничего не делает. Этот метод следует переопределять кодировщикам, которым требуется уведомление об изменениях в значении замены.

Параметры:
newReplacement - Значение замены

isLegalReplacement

public boolean isLegalReplacement(byte[] repl)

Определяет, является ли заданный массив байтов допустимым значением замены для этого кодировщика.

Значение замены является допустимым, если и только если это допустимая последовательность байтов в кодировке этого кодировщика; то есть, должна быть возможность декодировать замену в один или несколько шестнадцатибитных символов Юникода.

Реализация по умолчанию этого метода не очень эффективна; её обычно следует переопределять для повышения производительности.

Параметры:
repl - Массив байтов, который необходимо проверить
Возвращает:
true если и только если заданный массив байтов является допустимым значением замены для этого кодировщика

malformedInputAction

public CodingErrorAction malformedInputAction()

Возвращает текущее действие кодировщика для ошибок некорректного ввода.

Возвращает:
Текущее действие для ошибок некорректного ввода, которое никогда не null

onMalformedInput

public final CharsetEncoder onMalformedInput(CodingErrorAction newAction)

Изменяет действие этого кодировщика для ошибок некорректного ввода.

Этот метод вызывает метод implOnMalformedInput, передавая новое действие.

Параметры:
newAction - Новое действие; не должно быть null
Возвращает:
Этот кодировщик
Исключения:
IllegalArgumentException - Если условие на параметре не выполняется

implOnMalformedInput

protected void implOnMalformedInput(CodingErrorAction newAction)

Сообщает об изменении действия этого кодировщика для ошибок некорректного ввода.

Реализация по умолчанию этого метода ничего не делает. Этот метод следует переопределять кодировщикам, которым требуется уведомление об изменениях в действии для ошибок некорректного ввода.

Параметры:
newAction - Новое действие

unmappableCharacterAction

public CodingErrorAction unmappableCharacterAction()

Возвращает текущее действие кодировщика для ошибок неотображаемых символов.

Возвращает:
Текущее действие для ошибок неотображаемых символов, которое никогда не null

onUnmappableCharacter

public final CharsetEncoder onUnmappableCharacter(CodingErrorAction newAction)

Изменяет действие этого кодировщика для ошибок неотображаемых символов.

Этот метод вызывает метод implOnUnmappableCharacter, передавая новое действие.

Параметры:
newAction - Новое действие; не должно быть null
Возвращает:
Этот кодировщик
Исключения:
IllegalArgumentException - Если условие на параметре не выполняется

implOnUnmappableCharacter

protected void implOnUnmappableCharacter(CodingErrorAction newAction)

Сообщает об изменении действия этого кодировщика для ошибок неотображаемых символов.

Реализация по умолчанию этого метода ничего не делает. Этот метод следует переопределять кодировщикам, которым требуется уведомление об изменениях в действии для ошибок неотображаемых символов.

Параметры:
newAction - Новое действие

averageBytesPerChar

public final float averageBytesPerChar()

Возвращает среднее количество байтов, которое будет произведено для каждого символа на входе. Это эвристическое значение может использоваться для оценки размера буфера вывода, необходимого для данной последовательности входных данных.

Возвращает:
Среднее количество байтов, производимых на символ входных данных

maxBytesPerChar

public final float maxBytesPerChar()

Возвращает максимальное количество байтов, которое будет произведено для каждого символа на входе. Это значение может использоваться для вычисления наихудшего случая размера буфера вывода, необходимого для данной последовательности входных данных.

Возвращает:
Максимальное количество байтов, которое будет произведено на символ входных данных

encode

public final CoderResult encode(CharBuffer in,
                                ByteBuffer out,
                                boolean endOfInput)

Кодирует как можно больше символов из данного буфера ввода, записывая результаты в данный буфер вывода.

Буферы считываются и записываются, начиная с их текущих позиций. Максимум in.remaining() символов будут считаны и максимум out.remaining() байтов будут записаны. Позиции буферов будут смещены, чтобы отразить прочитанные символы и записанные байты, но их метки и пределы не будут изменены.

Кроме чтения символов из буфера ввода и записи байтов в буфер вывода, этот метод возвращает объект CoderResult для описания причины завершения:

  • CoderResult.UNDERFLOW указывает, что как можно больше буфера ввода было закодировано. Если больше нет входных данных, вызывающая сторона может перейти к следующему шагу операции кодирования. В противном случае этот метод следует вызвать снова с дополнительными входными данными.

  • CoderResult.OVERFLOW указывает, что в буфере вывода недостаточно места для кодирования дополнительных символов. Этот метод следует вызвать снова с буфером вывода, имеющим больше оставшихся байтов. Обычно это делается путем сброса закодированных байтов из буфера вывода.

  • Результат некорректного ввода указывает, что была обнаружена ошибка некорректного ввода. Некорректные символы начинаются в позиции буфера ввода (возможно, инкрементированной); количество некорректных символов можно определить, вызвав метод length объекта результата. Этот случай применим только в том случае, если действие некорректного ввода этого кодировщика равно CodingErrorAction.REPORT; в противном случае некорректный вход будет проигнорирован или заменён, как требуется.

  • Результат неотображаемого символа указывает, что была обнаружена ошибка неотображаемого символа. Символы, кодирующие неотображаемый символ, начинаются в позиции буфера ввода (возможно, инкрементированной); количество таких символов можно определить, вызвав метод length объекта результата. Этот случай применим только в том случае, если действие неотображаемого символа этого кодировщика равно CodingErrorAction.REPORT; в противном случае неотображаемый символ будет проигнорирован или заменён, как требуется.

В любом случае, если этот метод должен быть повторно вызван в той же операции кодирования, следует позаботиться о сохранении любых оставшихся символов в буфере ввода, чтобы они были доступны для следующего вызова.

Параметр endOfInput сообщает этому методу, может ли вызывающая сторона предоставить дополнительные данные за пределами содержащихся в данном буфере ввода. Если есть возможность предоставить дополнительные данные, вызывающая сторона должна передать false для этого параметра; если нет возможности предоставить дополнительные данные, вызывающая сторона должна передать true. Это не является ошибкой, и, на самом деле, это довольно распространённо передавать false в одном вызове и позже обнаружить, что на самом деле дополнительных данных не было. Однако крайне важно, чтобы заключительный вызов этого метода в последовательности вызовов всегда передавал true, чтобы любые оставшиеся нескодированные данные обрабатывались как некорректные.

Этот метод работает, вызывая метод encodeLoop, интерпретируя его результаты, обрабатывая ошибки и вызывая его снова по мере необходимости.

Параметры:
in - Буфер входных символов
out - Буфер выходных байтов
endOfInput - true если и только если вызывающий объект не может предоставить дополнительные входные символы, помимо тех, которые находятся в заданном буфере
Возвращает:
Объект coder-result, описывающий причину завершения
Исключения:
IllegalStateException - Если операция кодирования уже выполняется, и предыдущий шаг был вызовом ни метода reset, ни этого метода со значением false для параметра endOfInput, ни этого метода со значением true для параметра endOfInput, но возвращаемое значение указывает на незавершенную операцию кодирования
CoderMalfunctionError - Если вызов метода encodeLoop вызвал непредвиденное исключение

flush

public final CoderResult flush(ByteBuffer out)

Очищает этот кодировщик.

Некоторые кодировщики сохраняют внутреннее состояние и могут потребовать записи некоторых конечных байтов в буфер вывода после того, как вся последовательность входных данных была прочитана.

Любой дополнительный вывод записывается в буфер вывода, начиная с его текущей позиции. Будет записано не более out.remaining() байтов. Позиция буфера будет соответствующим образом продвинута, но метка и предел не будут изменены.

Если этот метод завершился успешно, то он возвращает CoderResult.UNDERFLOW. Если в буфере вывода недостаточно места, то он возвращает CoderResult.OVERFLOW. В этом случае этот метод необходимо вызвать снова с буфером вывода, в котором есть больше места, для завершения текущей операции кодирования.

Если этот кодировщик уже очищен, то вызов этого метода не оказывает никакого влияния.

Этот метод вызывает метод implFlush для выполнения фактической операции очистки.

Параметры:
out - Буфер выходных байтов
Возвращает:
Объект coder-result, либо CoderResult.UNDERFLOW, либо CoderResult.OVERFLOW
Исключения:
IllegalStateException - Если предыдущий шаг текущей операции кодирования был вызовом ни метода flush, ни трехаргументного метода encode со значением true для параметра endOfInput

implFlush

protected CoderResult implFlush(ByteBuffer out)

Очищает этот кодировщик.

По умолчанию этот метод ничего не делает и всегда возвращает CoderResult.UNDERFLOW. Этот метод должен быть переопределён кодировщиками, которые могут потребовать записи конечных байтов в буфер вывода после того, как вся последовательность входных данных была прочитана.

Параметры:
out - Буфер выходных байтов
Возвращает:
Объект coder-result, либо CoderResult.UNDERFLOW, либо CoderResult.OVERFLOW

reset

public final CharsetEncoder reset()

Сбрасывает этот кодировщик, очищая любое внутреннее состояние.

Этот метод сбрасывает состояние, не зависящее от кодировки, а также вызывает метод implReset для выполнения любых действий по сбросу, специфичных для кодировки.

Возвращает:
Этот кодировщик

implReset

protected void implReset()

Сбрасывает этот кодировщик, очищая любое внутреннее состояние, специфичное для кодировки.

По умолчанию этот метод ничего не делает. Этот метод должен быть переопределен кодировщиками, которые сохраняют внутреннее состояние.

encodeLoop

protected abstract CoderResult encodeLoop(CharBuffer in,
                                          ByteBuffer out)

Кодирует один или несколько символов в один или несколько байтов.

Этот метод encapsulates основной цикл кодирования, кодируя как можно больше символов, пока не исчерпаются входные данные, не закончится место в буфере вывода или не произойдет ошибка кодирования. Этот метод вызывается методом encode, который обрабатывает интерпретацию результатов и восстановление от ошибок.

Буферы считываются и записываются, начиная с текущих позиций. Будет прочитано не более in.remaining() символов, и будет записано не более out.remaining() байтов. Позиции буферов будут продвинуты, чтобы отразить прочитанные символы и записанные байты, но метки и пределы не будут изменены.

Этот метод возвращает объект CoderResult для описания причины завершения, так же как метод encode. Большинство реализаций этого метода будут обрабатывать ошибки кодирования, возвращая соответствующий объект результата для интерпретации методом encode. Оптимизированная реализация может вместо этого проверить соответствующее действие с ошибкой и реализовать это действие сама.

Реализация этого метода может выполнять произвольный просмотр вперёд, возвращая CoderResult.UNDERFLOW, пока не получит достаточных входных данных.

Параметры:
in - Буфер входных символов
out - Буфер выходных байтов
Возвращает:
Объект coder-result, описывающий причину завершения

encode

public final ByteBuffer encode(CharBuffer in)
                        throws CharacterCodingException

Удобный метод, который кодирует оставшееся содержимое одного входного буфера символов в новый выделенный буфер байтов.

Этот метод реализует всю операцию кодирования; то есть, он сбрасывает этот кодировщик, затем кодирует символы в заданном буфере символов и, наконец, очищает этот кодировщик. Следовательно, этот метод не следует вызывать, если операция кодирования уже выполняется.

Параметры:
in - Буфер входных символов
Возвращает:
Новый выделенный буфер байтов, содержащий результат операции кодирования. Позиция буфера будет равна нулю, а его предел будет следовать за последним записанным байтом.
Исключения:
IllegalStateException - Если операция кодирования уже выполняется
MalformedInputException - Если последовательность символов, начиная с текущей позиции входного буфера, не является допустимой шестнадцатибитной последовательностью Unicode, а текущее действие неверно-форматированного ввода равно CodingErrorAction.REPORT
UnmappableCharacterException - Если последовательность символов, начиная с текущей позиции входного буфера, не может быть отображена в эквивалентную последовательность байтов, а текущее действие недопустимого символа равно CodingErrorAction.REPORT
CharacterCodingException

canEncode

public boolean canEncode(char c)

Указывает, может ли этот кодировщик закодировать заданный символ.

Этот метод возвращает false если заданный символ является замещающим символом; такие символы могут быть интерпретированы только тогда, когда они являются членами пары, состоящей из старшего замещающего символа, за которым следует младший замещающий символ. Метод canEncode(CharSequence) может использоваться для проверки того, может ли последовательность символов быть закодирована.

Этот метод может изменить состояние этого кодировщика; поэтому его не следует вызывать, если уже выполняется операция кодирования.

По умолчанию реализация этого метода не очень эффективна; она обычно должна быть переопределена для повышения производительности.

Параметры:
c - Заданный символ
Возвращает:
true если и только если этот кодировщик может закодировать заданный символ
Исключения:
IllegalStateException - Если операция кодирования уже выполняется

canEncode

public boolean canEncode(CharSequence cs)

Указывает, может ли этот кодировщик закодировать данную последовательность символов.

Если этот метод возвращает false для определенной последовательности символов, то более подробную информацию о том, почему последовательность не может быть закодирована, можно получить, выполнив полную операцию кодирования.

Этот метод может изменить состояние этого кодировщика; поэтому его не следует вызывать, если уже выполняется операция кодирования.

По умолчанию реализация этого метода не очень эффективна; она обычно должна быть переопределена для повышения производительности.

Параметры:
cs - Заданная последовательность символов
Возвращает:
true если и только если этот кодировщик может закодировать заданную последовательность символов без выброса исключений и без выполнения каких-либо замен
Исключения:
IllegalStateException - Если операция кодирования уже выполняется

© 1993, 2020, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API