Spec-Zone .ru
спецификации, руководства, описания, API
|
public abstract class CharsetDecoder extends Object
Входная последовательность байта обеспечивается в буфере байта или серии таких буферов. Выходная последовательность символа пишется символьному буферу или серии таких буферов. Декодер должен всегда использоваться, делая следующую последовательность вызовов метода, именуемых в дальнейшем работа декодирования:
Сбросьте декодер через reset
метод, если это не использовалось прежде;
Вызовите decode
нуль метода или больше раз, пока дополнительный ввод может быть доступным, передавая false для параметра endOfInput и заполняя входной буфер и сбрасывая буфер вывода между вызовами;
Вызовите decode
метод одно заключительное время, передавая true для параметра endOfInput; и затем
Вызовите flush
метод так, чтобы декодер мог сбросить любое внутреннее состояние к буферу вывода.
decode
метод будет декодировать так много байтов насколько возможно от входного буфера, пишущий получающиеся символы в буфер вывода. decode
метод возвращается, когда более ввод требуется, когда есть недостаточно комнаты в буфере вывода, или когда ошибка декодирования произошла. В каждом случае a CoderResult
объект возвращается, чтобы описать причину завершения. invoker может исследовать этот объект и заполнить входной буфер, сбросить буфер вывода, или попытаться восстановиться с ошибки декодирования, как соответствующий, и попробовать еще раз.
Есть два общих типа декодирования ошибок. Если входная последовательность байта не является законной для этого набора символов тогда, ввод считают уродливым. Если входная последовательность байта является законной, но не может быть отображена на допустимый символ Unicode тогда встретились, с неотображаемым символом.
То, как ошибка декодирования обрабатывается, зависит от действия, которое требуют на тот тип ошибки, которая описывается экземпляром Действие значения по умолчанию для уродливого ввода и неотображаемо-символьных ошибок к Этот class разрабатывается, чтобы обработать многие из деталей процесса декодирования, включая реализацию ошибочных действий. Декодер для определенного набора символов, который является конкретным подклассом этого class, должен только реализовать краткий обзор Экземпляры этого class не безопасны для использования многократными параллельными потоками. CodingErrorAction
class. Возможные ошибочные действия к проигнорировать
ошибочный ввод,
отчет
ошибка к invoker через возвращенный
CoderResult
объект, или замена
ошибочный ввод с текущей стоимостью заменяющей строки. У замены есть начальное значение "\uFFFD"; его значение может быть изменено через
replaceWith
метод. отчет
их. Ошибочное действие уродливого ввода может быть изменено через
onMalformedInput
метод; неотображаемо-символьное действие может быть изменено через onUnmappableCharacter
метод. decodeLoop
метод, который инкапсулирует основной цикл декодирования. Подкласс, который поддерживает внутреннее состояние, должен, дополнительно, переопределить implFlush
и implReset
методы.
ByteBuffer
, CharBuffer
, Charset
, CharsetEncoder
Модификатор | Конструктор и Описание |
---|---|
protected |
CharsetDecoder(Charset cs, float averageCharsPerByte, float maxCharsPerByte)
Инициализирует новый декодер.
|
Модификатор и Тип | Метод и Описание |
---|---|
float |
averageCharsPerByte()
Возвращает среднее число символов, которые будут произведены для каждого байта ввода.
|
Набор символов |
charset()
Возвращает набор символов, который создал этот декодер.
|
CharBuffer |
decode(ByteBuffer in)
Метод удобства, который декодирует остающийся контент единственного входного буфера байта в недавно выделенный символьный буфер.
|
CoderResult |
decode(ByteBuffer in, CharBuffer out, boolean endOfInput)
Декодирует так много байтов насколько возможно от данного входного буфера, пишущий результаты в данный буфер вывода.
|
protected abstract CoderResult |
decodeLoop(ByteBuffer in, CharBuffer out)
Декодирует один или более байтов в один или более символов.
|
Набор символов |
detectedCharset()
Получает набор символов, который был обнаружен этим декодером (дополнительная работа).
|
CoderResult |
flush(CharBuffer out)
Сбросы этот декодер.
|
protected CoderResult |
implFlush(CharBuffer out)
Сбросы этот декодер.
|
protected void |
implOnMalformedInput(CodingErrorAction newAction)
Сообщает изменение действию уродливого ввода этого декодера.
|
protected void |
implOnUnmappableCharacter(CodingErrorAction newAction)
Сообщает изменение неотображаемо-символьному действию этого декодера.
|
protected void |
implReplaceWith(String newReplacement)
Сообщает изменение заменяющему значению этого декодера.
|
protected void |
implReset()
Сбросы этот декодер, очищая любое специфичное для набора символов внутреннее состояние.
|
boolean |
isAutoDetecting()
Говорит, реализует ли этот декодер набор символов автоматического обнаружения.
|
boolean |
isCharsetDetected()
Говорит, обнаружил ли этот декодер все же набор символов (дополнительная работа).
|
CodingErrorAction |
malformedInputAction()
Возвраты текущее действие этого декодера для ошибок уродливого ввода.
|
float |
maxCharsPerByte()
Возвращает максимальное количество символов, которые будут произведены для каждого байта ввода.
|
CharsetDecoder |
onMalformedInput(CodingErrorAction newAction)
Изменения действие этого декодера для ошибок уродливого ввода.
|
CharsetDecoder |
onUnmappableCharacter(CodingErrorAction newAction)
Изменения действие этого декодера для неотображаемо-символьных ошибок.
|
Строка |
replacement()
Возвраты заменяющее значение этого декодера.
|
CharsetDecoder |
replaceWith(String newReplacement)
Изменения заменяющее значение этого декодера.
|
CharsetDecoder |
reset()
Сбросы этот декодер, очищая любое внутреннее состояние.
|
CodingErrorAction |
unmappableCharacterAction()
Возвраты текущее действие этого декодера для неотображаемо-символьных ошибок.
|
protected CharsetDecoder(Charset cs, float averageCharsPerByte, float maxCharsPerByte)
averageCharsPerByte
- Положительное значение плавающее, указывающее на ожидаемое число символов, которые будут произведены для каждого входного байтаmaxCharsPerByte
- Положительное значение плавающее, указывающее на максимальное количество символов, которые будут произведены для каждого входного байтаIllegalArgumentException
- Если предварительные условия на параметрах не содержатpublic final Charset charset()
public final String replacement()
public final CharsetDecoder replaceWith(String newReplacement)
Этот метод вызывает implReplaceWith
метод, передавая новую замену, после проверки, что новая замена является приемлемой.
newReplacement
- Новая замена; не должен быть null и должен иметь ненулевую длинуIllegalArgumentException
- Если предварительные условия на параметре не содержатprotected void implReplaceWith(String newReplacement)
Реализация по умолчанию этого метода ничего не делает. Этот метод должен быть переопределен декодерами, которые требуют уведомления об изменениях к замене.
newReplacement
- public CodingErrorAction malformedInputAction()
public final CharsetDecoder onMalformedInput(CodingErrorAction newAction)
Этот метод вызывает implOnMalformedInput
метод, передавая новое действие.
newAction
- Новое действие; не должен быть nullIllegalArgumentException
- Если предварительное условие на параметре не содержитprotected void implOnMalformedInput(CodingErrorAction newAction)
Реализация по умолчанию этого метода ничего не делает. Этот метод должен быть переопределен декодерами, которые требуют уведомления об изменениях к действию уродливого ввода.
public CodingErrorAction unmappableCharacterAction()
public final CharsetDecoder onUnmappableCharacter(CodingErrorAction newAction)
Этот метод вызывает implOnUnmappableCharacter
метод, передавая новое действие.
newAction
- Новое действие; не должен быть nullIllegalArgumentException
- Если предварительное условие на параметре не содержитprotected void implOnUnmappableCharacter(CodingErrorAction newAction)
Реализация по умолчанию этого метода ничего не делает. Этот метод должен быть переопределен декодерами, которые требуют уведомления об изменениях к неотображаемо-символьному действию.
public final float averageCharsPerByte()
public final float maxCharsPerByte()
public final CoderResult decode(ByteBuffer in, CharBuffer 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 так, чтобы любой остающийся недекодируемый ввод был обработан как являющийся уродливым.
Этот метод работает, вызывая decodeLoop
метод, интерпретируя его результаты, условия ошибки из-за неправильного обращения, и повторно вызывая это по мере необходимости.
in
- Входной буфер байтаout
- Выходной буфер символаendOfInput
- true, если, и только если, invoker не может обеспечить дополнительные входные байты вне тех в данном буфереIllegalStateException
- Если работа декодирования уже происходит, и предыдущий шаг не был вызовом ни один из reset
метод, ни этого метода со значением false для параметра endOfInput, ни этого метода со значением true для параметра endOfInput, но возвращаемого значения, указывающего на неполную работу декодированияCoderMalfunctionError
- Если вызов decodeLoop метода выдавал неожиданное исключениеpublic final CoderResult flush(CharBuffer out)
Некоторые декодеры поддерживают внутреннее состояние и, возможно, должны записать некоторые заключительные символы в буфер вывода, как только полная входная последовательность была считана.
Любой дополнительный вывод пишется буферу вывода, начинающемуся в его текущей позиции. Самое большее out.remaining()
символы будут записаны. Позиция буфера будет усовершенствована соответственно, но ее метка и предел не будут изменены.
Если этот метод завершается успешно тогда, он возвращается CoderResult.UNDERFLOW
. Если есть недостаточная комната в буфере вывода тогда, это возвращается CoderResult.OVERFLOW
. Если это происходит тогда, этот метод должен быть вызван снова с буфером вывода, у которого есть больше комнаты, чтобы завершить текущую работу декодирования.
Если этот декодер был уже сброшен, затем вызывая этот метод, не имеет никакого эффекта.
Этот метод вызывает implFlush
метод, чтобы выполнить фактическую работу сбрасывания.
out
- Выходной буфер символаCoderResult.UNDERFLOW
или CoderResult.OVERFLOW
IllegalStateException
- Если предыдущий шаг текущей работы декодирования не был вызовом ни один из flush
метод, ни с тремя параметрами decode
метод со значением true для параметра endOfInputprotected CoderResult implFlush(CharBuffer out)
Реализация по умолчанию этого метода ничего не делает, и всегда возвращается CoderResult.UNDERFLOW
. Этот метод должен быть переопределен декодерами, которые, возможно, должны записать заключительные символы в буфер вывода, как только вся входная последовательность была считана.
out
- Выходной буфер символаCoderResult.UNDERFLOW
или CoderResult.OVERFLOW
public final CharsetDecoder reset()
Этот метод сбрасывает независимое государство набора символов и также вызывает implReset
метод, чтобы выполнить любые специфичные для набора символов действия сброса.
protected void implReset()
Реализация по умолчанию этого метода ничего не делает. Этот метод должен быть переопределен декодерами, которые поддерживают внутреннее состояние.
protected abstract CoderResult decodeLoop(ByteBuffer in, CharBuffer out)
Этот метод не инкапсулирует основной цикл декодирования, декодируя так много байтов насколько возможно до этого или исчерпывает ввод, исчерпывает комнату в буфере вывода, или встречается с ошибкой декодирования. Этот метод вызывается decode
метод, который обрабатывает интерпретацию результата и восстановление после ошибки.
Буферы читаются из, и пишутся, запускаясь в их текущих позициях. Самое большее in.remaining()
байты будут считаны, и самое большее out.remaining()
символы будут записаны. Позиции буферов будут усовершенствованы, чтобы отразить чтение байтов и записанные символы, но их метки и пределы не будут изменены.
Этот метод возвращает a CoderResult
объект описать его причину завершения, тем же самым способом как decode
метод. Большинство реализаций этого метода обработает ошибки декодирования, возвращая соответствующий объект результата для интерпретации decode
метод. Оптимизированная реализация может вместо этого исследовать соответствующее ошибочное действие и реализовать то действие непосредственно.
Реализация этого метода может выполнить произвольное предвидение, возвращаясь CoderResult.UNDERFLOW
пока это не получает достаточный ввод.
in
- Входной буфер байтаout
- Выходной буфер символаpublic final CharBuffer decode(ByteBuffer in) throws CharacterCodingException
Этот метод реализует всю работу декодирования; то есть, это сбрасывает этот декодер, тогда это декодирует байты в данном буфере байта, и наконец это сбрасывает этот декодер. Этот метод не должен поэтому быть вызван, если работа декодирования уже происходит.
in
- Входной буфер байтаIllegalStateException
- Если работа декодирования уже происходитMalformedInputException
- Если последовательность байта, запускающаяся во входной буферной текущей позиции, не является законной для этого набора символов, и текущее действие уродливого ввода является CodingErrorAction.REPORT
UnmappableCharacterException
- Если последовательность байта, запускающаяся во входной буферной текущей позиции, не может быть отображена на эквивалентную символьную последовательность, и текущее неотображаемо-символьное действие является CodingErrorAction.REPORT
CharacterCodingException
public boolean isAutoDetecting()
Реализация по умолчанию этого метода всегда возвращает false; это должно быть переопределено, автоматически обнаруживая декодеры, чтобы возвратить true.
public boolean isCharsetDetected()
Если этот декодер реализует набор символов автоматического обнаружения тогда в единственной точке во время работы декодирования, этот метод может начать возвращать true, чтобы указать, что определенный набор символов был обнаружен во входной последовательности байта. Как только это происходит, detectedCharset
метод может быть вызван, чтобы получить обнаруженный набор символов.
То, что этот метод возвращается, false не подразумевает, что никакие байты еще не декодировались. Некоторые декодеры автоматического обнаружения способны к декодированию некоторых, или даже всех, к входной последовательности байта, не закрепляя на определенном наборе символов.
Реализация по умолчанию этого метода всегда бросает UnsupportedOperationException
; это должно быть переопределено, автоматически обнаруживая декодеры, чтобы возвратить true, как только входной набор символов был определен.
UnsupportedOperationException
- Если этот декодер не реализует набор символов автоматического обнаруженияpublic Charset detectedCharset()
Если этот декодер реализует набор символов автоматического обнаружения тогда, этот метод возвращает фактический набор символов, как только это было обнаружено. После той точки этот метод возвращает то же самое значение для продолжительности текущей работы декодирования. Если недостаточно многие входные байты были все же считаны, чтобы определить фактический набор символов тогда, этот метод бросает IllegalStateException
.
Реализация по умолчанию этого метода всегда бросает UnsupportedOperationException
; это должно быть переопределено, автоматически обнаруживая декодеры, чтобы возвратить соответствующее значение.
IllegalStateException
- Если недостаточные байты были считаны, чтобы определить набор символовUnsupportedOperationException
- Если этот декодер не реализует набор символов автоматического обнаружения
Для дальнейшей ссылки API и документации разработчика, см. Java Документация SE. Та документация содержит более подробные, предназначенные разработчиком описания, с концептуальными краткими обзорами, определениями сроков, обходных решений, и рабочих примеров кода.
Авторское право © 1993, 2013, Oracle и/или его филиалы. Все права защищены.
Проект сборка-b92