Spec-Zone .ru
спецификации, руководства, описания, API
|
public abstract class CharsetEncoder extends Object
Входная последовательность символа обеспечивается в символьном буфере или серии таких буферов. Выходная последовательность байта пишется буферу байта или серии таких буферов. Кодер должен всегда использоваться, делая следующую последовательность вызовов метода, именуемых в дальнейшем работа кодирования:
Сбросьте кодер через reset
метод, если это не использовалось прежде;
Вызовите encode
нуль метода или больше раз, пока дополнительный ввод может быть доступным, передавая false для параметра endOfInput и заполняя входной буфер и сбрасывая буфер вывода между вызовами;
Вызовите encode
метод одно заключительное время, передавая true для параметра endOfInput; и затем
Вызовите flush
метод так, чтобы кодер мог сбросить любое внутреннее состояние к буферу вывода.
encode
метод закодирует так много символов насколько возможно от входного буфера, пишущий получающиеся байты в буфер вывода. encode
метод возвращается, когда более ввод требуется, когда есть недостаточно комнаты в буфере вывода, или когда ошибка кодирования произошла. В каждом случае a CoderResult
объект возвращается, чтобы описать причину завершения. invoker может исследовать этот объект и заполнить входной буфер, сбросить буфер вывода, или попытаться восстановиться с ошибки кодирования, как соответствующий, и попробовать еще раз.
Есть два общих типа кодирования ошибок. Если входная последовательность символа не является юридической шестнадцатиразрядной последовательностью Unicode тогда, ввод считают уродливым. Если входная последовательность символа является законной, но не может быть отображена на допустимую последовательность байта в данном наборе символов тогда встретились, с неотображаемым символом.
То, как ошибка кодирования обрабатывается, зависит от действия, которое требуют на тот тип ошибки, которая описывается экземпляром Действие по умолчанию для уродливого ввода и неотображаемо-символьных ошибок к Этот класс разрабатывается, чтобы обработать многие из деталей процесса кодирования, включая реализацию ошибочных действий. Кодер для определенного набора символов, который является конкретным подклассом этого класса, должен только реализовать краткий обзор Экземпляры этого класса не безопасны для использования многократными параллельными потоками. CodingErrorAction
класс. Возможные ошибочные действия к проигнорировать
ошибочный ввод,
отчет
ошибка к invoker через возвращенный
CoderResult
объект, или замена
ошибочный ввод с текущей стоимостью заменяющего байтового массива. Замена первоначально устанавливается в замену кодера по умолчанию, у которой часто (но не всегда) есть начальное значение { (byte)'?' }; его значение может быть изменено через
replaceWith
метод. отчет
их. Ошибочное действие уродливого ввода может быть изменено через
onMalformedInput
метод; неотображаемо-символьное действие может быть изменено через onUnmappableCharacter
метод. encodeLoop
метод, который инкапсулирует основной цикл кодирования. Подкласс, который поддерживает внутреннее состояние, должен, дополнительно, переопределить implFlush
и implReset
методы.
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()
Возвращает набор символов, который создал этот кодер.
|
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()
Возвраты текущее действие этого кодера для неотображаемо-символьных ошибок.
|
protected CharsetEncoder(Charset cs, float averageBytesPerChar, float maxBytesPerChar, byte[] replacement)
averageBytesPerChar
- Положительное значение плавающее, указывающее на ожидаемое число байтов, которые будут произведены для каждого входного символаmaxBytesPerChar
- Положительное значение плавающее, указывающее на максимальное количество байтов, которые будут произведены для каждого входного символаreplacement
- Начальная замена; не должен быть null, должен иметь ненулевую длину, не должен быть более длинным чем maxBytesPerChar, и должен быть
законный
IllegalArgumentException
- Если предварительные условия на параметрах не содержатprotected CharsetEncoder(Charset cs, float averageBytesPerChar, float maxBytesPerChar)
averageBytesPerChar
- Положительное значение плавающее, указывающее на ожидаемое число байтов, которые будут произведены для каждого входного символаmaxBytesPerChar
- Положительное значение плавающее, указывающее на максимальное количество байтов, которые будут произведены для каждого входного символаIllegalArgumentException
- Если предварительные условия на параметрах не содержатpublic final Charset charset()
public final byte[] replacement()
public final CharsetEncoder replaceWith(byte[] newReplacement)
Этот метод вызывает implReplaceWith
метод, передавая новую замену, после проверки, что новая замена является приемлемой.
newReplacement
- Новая замена; не должен быть null, должен иметь ненулевую длину, не должно быть более длинным чем значение, возвращенное maxBytesPerChar
метод, и должен быть
законный
IllegalArgumentException
- Если предварительные условия на параметре не содержатprotected void implReplaceWith(byte[] newReplacement)
Реализация по умолчанию этого метода ничего не делает. Этот метод должен быть переопределен кодерами, которые требуют уведомления об изменениях к замене.
newReplacement
- public boolean isLegalReplacement(byte[] repl)
Замена является законной, если, и только если, это - юридическая последовательность байтов в наборе символов этого кодера; то есть, должно быть возможно декодировать замену в один или более шестнадцатиразрядных символов Unicode.
Реализация по умолчанию этого метода не очень эффективна; это должно обычно быть переопределено, чтобы улучшить производительность.
repl
- Байтовый массив, который будет протестированpublic CodingErrorAction malformedInputAction()
public final CharsetEncoder onMalformedInput(CodingErrorAction newAction)
Этот метод вызывает implOnMalformedInput
метод, передавая новое действие.
newAction
- Новое действие; не должен быть nullIllegalArgumentException
- Если предварительное условие на параметре не содержитprotected void implOnMalformedInput(CodingErrorAction newAction)
Реализация по умолчанию этого метода ничего не делает. Этот метод должен быть переопределен кодерами, которые требуют уведомления об изменениях к действию уродливого ввода.
public CodingErrorAction unmappableCharacterAction()
public final CharsetEncoder onUnmappableCharacter(CodingErrorAction newAction)
Этот метод вызывает implOnUnmappableCharacter
метод, передавая новое действие.
newAction
- Новое действие; не должен быть nullIllegalArgumentException
- Если предварительное условие на параметре не содержитprotected void implOnUnmappableCharacter(CodingErrorAction newAction)
Реализация по умолчанию этого метода ничего не делает. Этот метод должен быть переопределен кодерами, которые требуют уведомления об изменениях к неотображаемо-символьному действию.
public final float averageBytesPerChar()
public final float maxBytesPerChar()
public final CoderResult encode(CharBuffer in, ByteBuffer out, boolean endOfInput)
Буферы читаются из, и пишутся, запускаясь в их текущих позициях. Самое большее in.remaining()
символы будут считаны и самое большее out.remaining()
байты будут записаны. Позиции буферов будут усовершенствованы, чтобы отразить чтение символов и записанные байты, но их метки и пределы не будут изменены.
В дополнение к чтению символов от входного буфера и записи байтов к буферу вывода, этот метод возвращает a CoderResult
объект описать его причину завершения:
CoderResult.UNDERFLOW
указывает, что так много входного буфера насколько возможно было закодировано. Если есть не далее ввод тогда, invoker может продолжиться к следующему шагу работы кодирования. Иначе этот метод должен быть вызван снова с дальнейшим вводом.
CoderResult.OVERFLOW
указывает, что есть недостаточное пространство в буфере вывода, чтобы больше кодировать символы. Этот метод должен быть вызван снова с буфером вывода, у которого есть более остающиеся байты. Это обычно делается, истощая любые закодированные байты от буфера вывода.
A уродливый ввод
результат указывает, что ошибка уродливого ввода была обнаружена. Уродливые символы начинают во входном буфере (возможно постепенно увеличенный) позицию; число уродливых символов может быть определено, вызывая объект результата
length
метод. Этот случай применяется только если уродливое действие
из этого кодера
CodingErrorAction.REPORT
; иначе уродливый ввод будет проигнорирован или заменен, согласно просьбе.
неотображаемо-символьный
результат указывает, что была обнаружена неотображаемо-символьная ошибка. Символы, которые кодируют неотображаемый символ, начинают во входном буфере (возможно постепенно увеличенный) позицию; число таких символов может быть определено, вызывая объект результата
length
метод. Этот случай применяется только если неотображаемое действие
из этого кодера
CodingErrorAction.REPORT
; иначе неотображаемый символ будет проигнорирован или заменен, согласно просьбе.
Параметр endOfInput советует этому методу относительно того, может ли invoker обеспечить далее ввод, кроме того содержавшийся в данном входном буфере. Если есть возможность обеспечения дополнительного ввода тогда, invoker должен передать false для этого параметра; если нет никакой возможности обеспечения дальнейшего ввода тогда, invoker должен передать true. Это не ошибочно, и фактически это довольно распространено, чтобы передать false в одном вызове и позже обнаружить, что никакой дальнейший ввод не был фактически доступен. Является критическим, однако, что заключительный вызов этого метода в последовательности вызовов всегда передает true так, чтобы любой остающийся незакодированный ввод был обработан как являющийся уродливым.
Этот метод работает, вызывая encodeLoop
метод, интерпретируя его результаты, условия ошибки из-за неправильного обращения, и повторно вызывая это по мере необходимости.
in
- Входной буфер символаout
- Выходной буфер байтаendOfInput
- true, если, и только если, invoker не может обеспечить дополнительные входные символы вне тех в данном буфереIllegalStateException
- Если работа кодирования уже происходит, и предыдущий шаг не был вызовом ни один из reset
метод, ни этого метода со значением false для параметра endOfInput, ни этого метода со значением true для параметра endOfInput, но возвращаемого значения, указывающего на неполную работу кодированияCoderMalfunctionError
- Если вызов encodeLoop метода выдавал неожиданное исключениеpublic final CoderResult flush(ByteBuffer out)
Некоторые кодеры поддерживают внутреннее состояние и, возможно, должны записать некоторые заключительные байты в буфер вывода, как только полная входная последовательность была считана.
Любой дополнительный вывод пишется буферу вывода, начинающемуся в его текущей позиции. Самое большее out.remaining()
байты будут записаны. Позиция буфера будет усовершенствована соответственно, но ее метка и предел не будут изменены.
Если этот метод завершается успешно тогда, он возвращается CoderResult.UNDERFLOW
. Если есть недостаточная комната в буфере вывода тогда, это возвращается CoderResult.OVERFLOW
. Если это происходит тогда, этот метод должен быть вызван снова с буфером вывода, у которого есть больше комнаты, чтобы завершить текущую работу кодирования.
Если этот кодер был уже сброшен, затем вызывая этот метод, не имеет никакого эффекта.
Этот метод вызывает implFlush
метод, чтобы выполнить фактическую работу сбрасывания.
out
- Выходной буфер байтаCoderResult.UNDERFLOW
или CoderResult.OVERFLOW
IllegalStateException
- Если предыдущий шаг текущей работы кодирования не был вызовом ни один из flush
метод, ни с тремя параметрами encode
метод со значением true для параметра endOfInputprotected CoderResult implFlush(ByteBuffer out)
Реализация по умолчанию этого метода ничего не делает, и всегда возвращается CoderResult.UNDERFLOW
. Этот метод должен быть переопределен кодерами, которые, возможно, должны записать заключительные байты в буфер вывода, как только вся входная последовательность была считана.
out
- Выходной буфер байтаCoderResult.UNDERFLOW
или CoderResult.OVERFLOW
public final CharsetEncoder reset()
Этот метод сбрасывает независимое государство набора символов и также вызывает implReset
метод, чтобы выполнить любые специфичные для набора символов действия сброса.
protected void implReset()
Реализация по умолчанию этого метода ничего не делает. Этот метод должен быть переопределен кодерами, которые поддерживают внутреннее состояние.
protected abstract CoderResult encodeLoop(CharBuffer in, ByteBuffer out)
Этот метод не инкапсулирует основной цикл кодирования, кодируя так много символов насколько возможно до этого или исчерпывает ввод, исчерпывает комнату в буфере вывода, или встречается с ошибкой кодирования. Этот метод вызывается encode
метод, который обрабатывает интерпретацию результата и восстановление после ошибки.
Буферы читаются из, и пишутся, запускаясь в их текущих позициях. Самое большее in.remaining()
символы будут считаны, и самое большее out.remaining()
байты будут записаны. Позиции буферов будут усовершенствованы, чтобы отразить чтение символов и записанные байты, но их метки и пределы не будут изменены.
Этот метод возвращает a CoderResult
объект описать его причину завершения, тем же самым способом как encode
метод. Большинство реализаций этого метода обработает ошибки кодирования, возвращая соответствующий объект результата для интерпретации encode
метод. Оптимизированная реализация может вместо этого исследовать соответствующее ошибочное действие и реализовать то действие непосредственно.
Реализация этого метода может выполнить произвольное предвидение, возвращаясь CoderResult.UNDERFLOW
пока это не получает достаточный ввод.
in
- Входной буфер символаout
- Выходной буфер байтаpublic final ByteBuffer encode(CharBuffer in) throws CharacterCodingException
Этот метод реализует всю работу кодирования; то есть, это сбрасывает этот кодер, тогда это кодирует символы в данном символьном буфере, и наконец это сбрасывает этот кодер. Этот метод не должен поэтому быть вызван, если работа кодирования уже происходит.
in
- Входной буфер символаIllegalStateException
- Если работа кодирования уже происходитMalformedInputException
- Если символьная последовательность, запускающаяся во входной буферной текущей позиции, не является юридической шестнадцатиразрядной последовательностью Unicode, и текущее действие уродливого ввода является CodingErrorAction.REPORT
UnmappableCharacterException
- Если символьная последовательность, запускающаяся во входной буферной текущей позиции, не может быть отображена на эквивалентную последовательность байта, и текущее неотображаемо-символьное действие является CodingErrorAction.REPORT
CharacterCodingException
public boolean canEncode(char c)
Этот метод возвращает false, если данный символ является суррогатным символом; такие символы могут быть интерпретированы только, когда они - элементы пары, состоящей из высокого заместителя, сопровождаемого низким заместителем. canEncode(CharSequence)
метод может использоваться, чтобы протестировать, может ли быть закодирована символьная последовательность.
Этот метод может изменить состояние этого кодера; это не должно поэтому быть вызвано, если работа кодирования уже происходит.
Реализация по умолчанию этого метода не очень эффективна; это должно обычно быть переопределено, чтобы улучшить производительность.
IllegalStateException
- Если работа кодирования уже происходитpublic boolean canEncode(CharSequence cs)
Если этот метод возвращает false для определенной символьной последовательности тогда больше информации о том, почему последовательность не может быть закодирована, может быть получен, выполняя полную работу кодирования.
Этот метод может изменить состояние этого кодера; это не должно поэтому быть вызвано, если работа кодирования уже происходит.
Реализация по умолчанию этого метода не очень эффективна; это должно обычно быть переопределено, чтобы улучшить производительность.
IllegalStateException
- Если работа кодирования уже происходит
Для дальнейшей ссылки API и документации разработчика, см.
Авторское право © 1993, 2011, Oracle и/или его филиалы. Все права защищены.