java.lang.Object | |
↳ | java.nio.charset.CharsetEncoder |
A converter that can converts a 16-bit Unicode character sequence to a byte sequence in some charset.
The input character sequence is wrapped by a CharBuffer and the output character sequence is a ByteBuffer. An encoder instance should be used in the following sequence, which is referred to as a encoding operation:
endOfInput
parameter must be set to false, the input buffer must be filled and the
output buffer must be flushed between invocations;endOfInput
parameter must be
set to true
The encode method will convert as many characters as possible, and the process won't stop until the input characters have run out, the output buffer has been filled or some error has happened. A CoderResult instance will be returned to indicate the stop reason, and the invoker can identify the result and choose further action, which includes filling the input buffer, flushing the output buffer or recovering from an error and trying again.
There are two common encoding errors. One is named malformed and it is returned when the input content is an illegal 16-bit Unicode character sequence, the other is named unmappable character and occurs when there is a problem mapping the input to a valid byte sequence in the specified charset.
Both errors can be handled in three ways, the default one is to report the
error to the invoker by a CoderResult instance, and the
alternatives are to ignore it or to replace the erroneous input with the
replacement byte array. The replacement byte array is '?
' by
default and can be changed by invoking the
replaceWith method. The invoker of this encoder
can choose one way by specifying a
CodingErrorAction instance for each error type via
the onMalformedInput method and
the onUnmappableCharacter
method.
This class is abstract and encapsulates many common operations of the encoding process for all charsets. Encoders for a specific charset should extend this class and need only to implement the encodeLoop method for basic encoding. If a subclass maintains an internal state, it should override the implFlush method and the implReset method in addition.
This class is not thread-safe.
Protected Constructors | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Constructs a new
CharsetEncoder using the given
Charset , average number and maximum number of bytes
created by this encoder for one input character. | |||||||||||
Constructs a new
CharsetEncoder using the given
Charset , replacement byte array, average number and
maximum number of bytes created by this encoder for one input character. |
Public Methods | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Gets the average number of bytes created by this encoder for a single
input character.
| |||||||||||
Checks if a given
CharSequence can be encoded by this
encoder. | |||||||||||
Checks if the given character can be encoded by this encoder.
| |||||||||||
Gets the
Charset which this encoder uses. | |||||||||||
Encodes characters starting at the current position of the given input
buffer, and writes the equivalent byte sequence into the given output
buffer from its current position.
| |||||||||||
This is a facade method for the encoding operation.
| |||||||||||
Flushes this encoder.
| |||||||||||
Checks if the given argument is legal as this encoder's replacement byte
array.
| |||||||||||
Gets this encoder's
CodingErrorAction when a malformed
input error occurred during the encoding process. | |||||||||||
Gets the maximum number of bytes which can be created by this encoder for
one input character, must be positive.
| |||||||||||
Sets this encoder's action on malformed input error.
| |||||||||||
Sets this encoder's action on unmappable character error.
| |||||||||||
Sets the new replacement value.
| |||||||||||
Gets the replacement byte array, which is never null or empty.
| |||||||||||
Resets this encoder.
| |||||||||||
Gets this encoder's
CodingErrorAction when unmappable
character occurred during encoding process. |
Protected Methods | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Encodes characters into bytes.
| |||||||||||
Flushes this encoder.
| |||||||||||
Notifies that this encoder's
CodingErrorAction specified
for malformed input error has been changed. | |||||||||||
Notifies that this encoder's
CodingErrorAction specified
for unmappable character error has been changed. | |||||||||||
Notifies that this encoder's replacement has been changed.
| |||||||||||
Resets this encoder's charset related state.
|
[Expand]
Inherited Methods | |||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
From class java.lang.Object
|
Constructs a new CharsetEncoder
using the given
Charset
, average number and maximum number of bytes
created by this encoder for one input character.
cs | the Charset to be used by this encoder. |
---|---|
averageBytesPerChar | average number of bytes created by this encoder for one input character, must be positive. |
maxBytesPerChar | maximum number of bytes which can be created by this encoder for one input character, must be positive. |
IllegalArgumentException | if maxBytesPerChar or
averageBytesPerChar is negative. |
---|
Constructs a new CharsetEncoder
using the given
Charset
, replacement byte array, average number and
maximum number of bytes created by this encoder for one input character.
cs | the Charset to be used by this encoder. |
---|---|
averageBytesPerChar | average number of bytes created by this encoder for one single input character, must be positive. |
maxBytesPerChar | maximum number of bytes which can be created by this encoder for one single input character, must be positive. |
replacement | the replacement byte array, cannot be null or empty, its
length cannot be larger than maxBytesPerChar ,
and must be a legal replacement, which can be justified by
isLegalReplacement. |
IllegalArgumentException | if any parameters are invalid. |
---|
Gets the average number of bytes created by this encoder for a single input character.
Checks if a given CharSequence
can be encoded by this
encoder.
Note that this method can change the internal status of this encoder, so
it should not be called when another encode process is ongoing, otherwise
it will throw an IllegalStateException
.
This method can be overridden for performance improvement.
sequence | the given CharSequence . |
---|
CharSequence
can be encoded by
this encoder.IllegalStateException | if current internal status is neither RESET or FLUSH. |
---|
Checks if the given character can be encoded by this encoder.
Note that this method can change the internal status of this encoder, so
it should not be called when another encoding process is ongoing,
otherwise it will throw an IllegalStateException
.
This method can be overridden for performance improvement.
c | the given encoder. |
---|
IllegalStateException | if another encode process is ongoing so that the current internal status is neither RESET or FLUSH. |
---|
Gets the Charset
which this encoder uses.
Charset
which this encoder uses.Encodes characters starting at the current position of the given input buffer, and writes the equivalent byte sequence into the given output buffer from its current position.
The buffers' position will be changed with the reading and writing operation, but their limits and marks will be kept intact.
A CoderResult
instance will be returned according to
following rules:
The endOfInput
parameter indicates if the invoker can
provider further input. This parameter is true if and only if the
characters in the current input buffer are all inputs for this encoding
operation. Note that it is common and won't cause an error if the invoker
sets false and then has no more input available, while it may cause an
error if the invoker always sets true in several consecutive invocations.
This would make the remaining input to be treated as malformed input.
input.
This method invokes the encodeLoop method to implement the basic encode logic for a specific charset.
in | the input buffer. |
---|---|
out | the output buffer. |
endOfInput | true if all the input characters have been provided. |
CoderResult
instance indicating the result.IllegalStateException | if the encoding operation has already started or no more input is needed in this encoding process. |
---|---|
CoderMalfunctionError | If the encodeLoop
method threw an BufferUnderflowException or
BufferUnderflowException . |
This is a facade method for the encoding operation.
This method encodes the remaining character sequence of the given character buffer into a new byte buffer. This method performs a complete encoding operation, resets at first, then encodes, and flushes at last.
This method should not be invoked if another encode operation is ongoing.
in | the input buffer. |
---|
ByteBuffer
containing the bytes produced by
this encoding operation. The buffer's limit will be the position
of the last byte in the buffer, and the position will be zero.IllegalStateException | if another encoding operation is ongoing. |
---|---|
MalformedInputException | if an illegal input character sequence for this charset is encountered, and the action for malformed error is CodingErrorAction.REPORT |
UnmappableCharacterException | if a legal but unmappable input character sequence for this charset is encountered, and the action for unmappable character error is CodingErrorAction.REPORT. Unmappable means the Unicode character sequence at the input buffer's current position cannot be mapped to a equivalent byte sequence. |
CharacterCodingException | if other exception happened during the encode operation. |
Flushes this encoder.
This method will call implFlush. Some encoders may need to write some bytes to the output buffer when they have read all input characters, subclasses can overridden implFlush to perform writing action.
The maximum number of written bytes won't larger than
out.remaining(). If some encoder wants to
write more bytes than the output buffer's available remaining space, then
CoderResult.OVERFLOW
will be returned, and this method
must be called again with a byte buffer that has free space. Otherwise
this method will return CoderResult.UNDERFLOW
, which
means one encoding process has been completed successfully.
During the flush, the output buffer's position will be changed accordingly, while its mark and limit will be intact.
out | the given output buffer. |
---|
CoderResult.UNDERFLOW
or
CoderResult.OVERFLOW
.IllegalStateException | if this encoder hasn't read all input characters during one
encoding process, which means neither after calling
encode(CharBuffer) nor after
calling encode(CharBuffer, ByteBuffer, boolean) with true
for the last boolean parameter. |
---|
Checks if the given argument is legal as this encoder's replacement byte array. The given byte array is legal if and only if it can be decode into sixteen bits Unicode characters. This method can be overridden for performance improvement.
repl | the given byte array to be checked. |
---|
Gets this encoder's CodingErrorAction
when a malformed
input error occurred during the encoding process.
CodingErrorAction
when a malformed
input error occurred during the encoding process.Gets the maximum number of bytes which can be created by this encoder for one input character, must be positive.
Sets this encoder's action on malformed input error. This method will call the implOnMalformedInput method with the given new action as argument.
newAction | the new action on malformed input error. |
---|
IllegalArgumentException | if the given newAction is null. |
---|
Sets this encoder's action on unmappable character error. This method will call the implOnUnmappableCharacter method with the given new action as argument.
newAction | the new action on unmappable character error. |
---|
IllegalArgumentException | if the given newAction is null. |
---|
Sets the new replacement value. This method first checks the given replacement's validity, then changes the replacement value and finally calls the implReplaceWith method with the given new replacement as argument.
replacement | the replacement byte array, cannot be null or empty, its
length cannot be larger than maxBytesPerChar ,
and it must be legal replacement, which can be justified by
calling isLegalReplacement(byte[] repl) . |
---|
IllegalArgumentException | if the given replacement cannot satisfy the requirement mentioned above. |
---|
Gets the replacement byte array, which is never null or empty.
Resets this encoder. This method will reset the internal status and then
calla implReset()
to reset any status related to the
specific charset.
Gets this encoder's CodingErrorAction
when unmappable
character occurred during encoding process.
CodingErrorAction
when unmappable
character occurred during encoding process.Encodes characters into bytes. This method is called by encode.
This method will implement the essential encoding operation, and it won't
stop encoding until either all the input characters are read, the output
buffer is filled, or some exception is encountered. Then it will
return a CoderResult
object indicating the result of the
current encoding operation. The rule to construct the
CoderResult
is the same as for
encode. When an
exception is encountered in the encoding operation, most implementations
of this method will return a relevant result object to the
encode method, and some
performance optimized implementation may handle the exception and
implement the error action itself.
The buffers are scanned from their current positions, and their positions will be modified accordingly, while their marks and limits will be intact. At most in.remaining() characters will be read, and out.remaining() bytes will be written.
Note that some implementations may pre-scan the input buffer and return
CoderResult.UNDERFLOW
until it receives sufficient input.
in | the input buffer. |
---|---|
out | the output buffer. |
CoderResult
instance indicating the result.Flushes this encoder. The default implementation does nothing and always
returns CoderResult.UNDERFLOW
; this method can be
overridden if needed.
out | the output buffer. |
---|
CoderResult.UNDERFLOW
or
CoderResult.OVERFLOW
.Notifies that this encoder's CodingErrorAction
specified
for malformed input error has been changed. The default implementation
does nothing; this method can be overridden if needed.
newAction | the new action. |
---|
Notifies that this encoder's CodingErrorAction
specified
for unmappable character error has been changed. The default
implementation does nothing; this method can be overridden if needed.
newAction | the new action. |
---|
Notifies that this encoder's replacement has been changed. The default implementation does nothing; this method can be overridden if needed.
newReplacement | the new replacement string. |
---|
Resets this encoder's charset related state. The default implementation does nothing; this method can be overridden if needed.