Package com.esotericsoftware.kryo.io
Class ByteBufferOutput
java.lang.Object
java.io.OutputStream
com.esotericsoftware.kryo.io.Output
com.esotericsoftware.kryo.io.ByteBufferOutput
- All Implemented Interfaces:
Closeable
,Flushable
,AutoCloseable
An OutputStream that buffers data in a byte array and optionally flushes to another OutputStream. Utility methods are provided
for efficiently writing primitive types and strings.
-
Field Summary
FieldsModifier and TypeFieldDescription(package private) ByteOrder
protected static final ByteOrder
protected ByteBuffer
protected boolean
Fields inherited from class com.esotericsoftware.kryo.io.Output
buffer, capacity, maxCapacity, outputStream, position, total
-
Constructor Summary
ConstructorsConstructorDescriptionCreates an uninitialized Output.ByteBufferOutput
(int bufferSize) Creates a new Output for writing to a direct ByteBuffer.ByteBufferOutput
(int bufferSize, int maxBufferSize) Creates a new Output for writing to a direct ByteBuffer.ByteBufferOutput
(OutputStream outputStream) Creates a new Output for writing to an OutputStream.ByteBufferOutput
(OutputStream outputStream, int bufferSize) Creates a new Output for writing to an OutputStream.ByteBufferOutput
(ByteBuffer buffer) Creates a new Output for writing to a ByteBuffer.ByteBufferOutput
(ByteBuffer buffer, int maxBufferSize) Creates a new Output for writing to a ByteBuffer. -
Method Summary
Modifier and TypeMethodDescriptionvoid
clear()
Sets the position and total to zero.void
close()
Flushes any buffered bytes and closes the underlying OutputStream, if any.void
flush()
Writes the buffered bytes to the underlying OutputStream, if any.Returns the buffer.boolean
Return current setting for variable length encoding of integersprivate boolean
order()
void
protected boolean
require
(int required) void
setBuffer
(ByteBuffer buffer) Sets the buffer that will be written to.void
setBuffer
(ByteBuffer buffer, int maxBufferSize) Sets the buffer that will be written to.void
setOutputStream
(OutputStream outputStream) Sets a new OutputStream.void
setPosition
(int position) Sets the current position in the buffer.void
setVarIntsEnabled
(boolean varIntsEnabled) Controls if a variable length encoding for integer types should be used when serializers suggest it.byte[]
toBytes()
Returns a new byte array containing the bytes currently in the buffer between zero andOutput.position()
.void
write
(byte[] bytes) Writes the bytes.void
write
(byte[] bytes, int offset, int length) Writes the bytes.void
write
(int value) Writes a byte.void
writeAscii
(String value) Writes a string that is known to contain only ASCII characters.private void
writeAscii_slow
(String value, int charCount) void
writeBoolean
(boolean value) Writes a 1 byte boolean.void
writeByte
(byte value) void
writeByte
(int value) void
writeBytes
(byte[] bytes) Writes the bytes.void
writeBytes
(byte[] bytes, int offset, int count) Writes the bytes.void
writeChar
(char value) Writes a 2 byte char.void
writeChars
(char[] object) Bulk output of a char array.void
writeDouble
(double value) Writes an 8 byte double.int
writeDouble
(double value, double precision, boolean optimizePositive) Writes a 1-9 byte double with reduced precision.void
writeDoubles
(double[] object) Bulk output of a double array.void
writeFloat
(float value) Writes a 4 byte float.int
writeFloat
(float value, float precision, boolean optimizePositive) Writes a 1-5 byte float with reduced precision.void
writeFloats
(float[] object) Bulk output of a float array.void
writeInt
(int value) Writes a 4 byte int.int
writeInt
(int value, boolean optimizePositive) Writes a 1-5 byte int.void
writeInts
(int[] object) Bulk output of an int array.void
writeLong
(long value) Writes an 8 byte long.int
writeLong
(long value, boolean optimizePositive) Writes a 1-9 byte long.void
writeLongs
(long[] object) Bulk output of an long array.int
writeLongS
(long value, boolean optimizePositive) Writes a 1-9 byte long.void
writeShort
(int value) Writes a 2 byte short.void
writeShorts
(short[] object) Bulk output of a short array.void
writeString
(CharSequence value) Writes the length and CharSequence as UTF8, or null.void
writeString
(String value) Writes the length and string, or null.private void
writeString_slow
(CharSequence value, int charCount, int charIndex) private void
writeUtf8Length
(int value) Writes the length of a string, which is a variable length encoded int except the first byte uses bit 8 to denote UTF8 and bit 7 to denote if another byte is present.int
writeVarInt
(int val, boolean optimizePositive) Writes a 1-5 byte int.int
writeVarLong
(long value, boolean optimizePositive) Writes a 1-9 byte long.Methods inherited from class com.esotericsoftware.kryo.io.Output
getBuffer, intLength, longLength, position, setBuffer, setBuffer, total, writeInts, writeLongs
-
Field Details
-
niobuffer
-
varIntsEnabled
protected boolean varIntsEnabled -
byteOrder
ByteOrder byteOrder -
nativeOrder
-
-
Constructor Details
-
ByteBufferOutput
public ByteBufferOutput()Creates an uninitialized Output. A buffer must be set before the Output is used.- See Also:
-
ByteBufferOutput
public ByteBufferOutput(int bufferSize) Creates a new Output for writing to a direct ByteBuffer.- Parameters:
bufferSize
- The initial and maximum size of the buffer. An exception is thrown if this size is exceeded.
-
ByteBufferOutput
public ByteBufferOutput(int bufferSize, int maxBufferSize) Creates a new Output for writing to a direct ByteBuffer.- Parameters:
bufferSize
- The initial size of the buffer.maxBufferSize
- The buffer is doubled as needed until it exceeds maxBufferSize and an exception is thrown.
-
ByteBufferOutput
Creates a new Output for writing to an OutputStream. A buffer size of 4096 is used. -
ByteBufferOutput
Creates a new Output for writing to an OutputStream. -
ByteBufferOutput
Creates a new Output for writing to a ByteBuffer. -
ByteBufferOutput
Creates a new Output for writing to a ByteBuffer.- Parameters:
maxBufferSize
- The buffer is doubled as needed until it exceeds maxCapacity and an exception is thrown.
-
-
Method Details
-
order
-
order
-
getOutputStream
- Overrides:
getOutputStream
in classOutput
-
setOutputStream
Sets a new OutputStream. The position and total are reset, discarding any buffered bytes.- Overrides:
setOutputStream
in classOutput
- Parameters:
outputStream
- May be null.
-
setBuffer
Sets the buffer that will be written to. maxCapacity is set to the specified buffer's capacity.- See Also:
-
setBuffer
Sets the buffer that will be written to. The byte order, position and capacity are set to match the specified buffer. The total is set to 0. TheOutputStream
is set to null.- Parameters:
maxBufferSize
- The buffer is doubled as needed until it exceeds maxCapacity and an exception is thrown.
-
getByteBuffer
Returns the buffer. The bytes between zero andOutput.position()
are the data that has been written. -
toBytes
public byte[] toBytes()Returns a new byte array containing the bytes currently in the buffer between zero andOutput.position()
. -
setPosition
public void setPosition(int position) Sets the current position in the buffer.- Overrides:
setPosition
in classOutput
-
clear
public void clear()Sets the position and total to zero. -
require
- Overrides:
require
in classOutput
- Returns:
- true if the buffer has been resized.
- Throws:
KryoException
-
flush
Writes the buffered bytes to the underlying OutputStream, if any.- Specified by:
flush
in interfaceFlushable
- Overrides:
flush
in classOutput
- Throws:
KryoException
-
close
Flushes any buffered bytes and closes the underlying OutputStream, if any.- Specified by:
close
in interfaceAutoCloseable
- Specified by:
close
in interfaceCloseable
- Overrides:
close
in classOutput
- Throws:
KryoException
-
write
Writes a byte.- Overrides:
write
in classOutput
- Throws:
KryoException
-
write
Writes the bytes. Note the byte[] length is not written.- Overrides:
write
in classOutput
- Throws:
KryoException
-
write
Writes the bytes. Note the byte[] length is not written.- Overrides:
write
in classOutput
- Throws:
KryoException
-
writeByte
- Overrides:
writeByte
in classOutput
- Throws:
KryoException
-
writeByte
- Overrides:
writeByte
in classOutput
- Throws:
KryoException
-
writeBytes
Writes the bytes. Note the byte[] length is not written.- Overrides:
writeBytes
in classOutput
- Throws:
KryoException
-
writeBytes
Writes the bytes. Note the byte[] length is not written.- Overrides:
writeBytes
in classOutput
- Throws:
KryoException
-
writeInt
Writes a 4 byte int.- Overrides:
writeInt
in classOutput
- Throws:
KryoException
-
writeInt
Description copied from class:Output
Writes a 1-5 byte int. This stream may consider such a variable length encoding request as a hint. It is not guaranteed that a variable length encoding will be really used. The stream may decide to use native-sized integer representation for efficiency reasons.- Overrides:
writeInt
in classOutput
- Parameters:
optimizePositive
- If true, small positive numbers will be more efficient (1 byte) and small negative numbers will be inefficient (5 bytes).- Throws:
KryoException
-
writeVarInt
Description copied from class:Output
Writes a 1-5 byte int. It is guaranteed that a varible length encoding will be used.- Overrides:
writeVarInt
in classOutput
- Parameters:
optimizePositive
- If true, small positive numbers will be more efficient (1 byte) and small negative numbers will be inefficient (5 bytes).- Throws:
KryoException
-
writeString
Writes the length and string, or null. Short strings are checked and if ASCII they are written more efficiently, else they are written as UTF8. If a string is known to be ASCII,writeAscii(String)
may be used. The string can be read usingInput.readString()
orInput.readStringBuilder()
.- Overrides:
writeString
in classOutput
- Parameters:
value
- May be null.- Throws:
KryoException
-
writeString
Writes the length and CharSequence as UTF8, or null. The string can be read usingInput.readString()
orInput.readStringBuilder()
.- Overrides:
writeString
in classOutput
- Parameters:
value
- May be null.- Throws:
KryoException
-
writeAscii
Writes a string that is known to contain only ASCII characters. Non-ASCII strings passed to this method will be corrupted. Each byte is a 7 bit character with the remaining byte denoting if another character is available. This is slightly more efficient thanwriteString(String)
. The string can be read usingInput.readString()
orInput.readStringBuilder()
.- Overrides:
writeAscii
in classOutput
- Parameters:
value
- May be null.- Throws:
KryoException
-
writeUtf8Length
private void writeUtf8Length(int value) Writes the length of a string, which is a variable length encoded int except the first byte uses bit 8 to denote UTF8 and bit 7 to denote if another byte is present. -
writeString_slow
-
writeAscii_slow
- Throws:
KryoException
-
writeFloat
Writes a 4 byte float.- Overrides:
writeFloat
in classOutput
- Throws:
KryoException
-
writeFloat
Writes a 1-5 byte float with reduced precision.- Overrides:
writeFloat
in classOutput
- Parameters:
optimizePositive
- If true, small positive numbers will be more efficient (1 byte) and small negative numbers will be inefficient (5 bytes).- Throws:
KryoException
-
writeShort
Writes a 2 byte short.- Overrides:
writeShort
in classOutput
- Throws:
KryoException
-
writeLong
Writes an 8 byte long.- Overrides:
writeLong
in classOutput
- Throws:
KryoException
-
writeLong
Description copied from class:Output
Writes a 1-9 byte long. This stream may consider such a variable length encoding request as a hint. It is not guaranteed that a variable length encoding will be really used. The stream may decide to use native-sized integer representation for efficiency reasons.- Overrides:
writeLong
in classOutput
- Parameters:
optimizePositive
- If true, small positive numbers will be more efficient (1 byte) and small negative numbers will be inefficient (9 bytes).- Throws:
KryoException
-
writeVarLong
Description copied from class:Output
Writes a 1-9 byte long. It is guaranteed that a varible length encoding will be used.- Overrides:
writeVarLong
in classOutput
- Parameters:
optimizePositive
- If true, small positive numbers will be more efficient (1 byte) and small negative numbers will be inefficient (9 bytes).- Throws:
KryoException
-
writeLongS
Writes a 1-9 byte long.- Parameters:
optimizePositive
- If true, small positive numbers will be more efficient (1 byte) and small negative numbers will be inefficient (9 bytes).- Throws:
KryoException
-
writeBoolean
Writes a 1 byte boolean.- Overrides:
writeBoolean
in classOutput
- Throws:
KryoException
-
writeChar
Writes a 2 byte char.- Overrides:
writeChar
in classOutput
- Throws:
KryoException
-
writeDouble
Writes an 8 byte double.- Overrides:
writeDouble
in classOutput
- Throws:
KryoException
-
writeDouble
public int writeDouble(double value, double precision, boolean optimizePositive) throws KryoException Writes a 1-9 byte double with reduced precision.- Overrides:
writeDouble
in classOutput
- Parameters:
optimizePositive
- If true, small positive numbers will be more efficient (1 byte) and small negative numbers will be inefficient (9 bytes).- Throws:
KryoException
-
writeInts
Bulk output of an int array.- Overrides:
writeInts
in classOutput
- Throws:
KryoException
-
writeLongs
Bulk output of an long array.- Overrides:
writeLongs
in classOutput
- Throws:
KryoException
-
writeFloats
Bulk output of a float array.- Overrides:
writeFloats
in classOutput
- Throws:
KryoException
-
writeShorts
Bulk output of a short array.- Overrides:
writeShorts
in classOutput
- Throws:
KryoException
-
writeChars
Bulk output of a char array.- Overrides:
writeChars
in classOutput
- Throws:
KryoException
-
writeDoubles
Bulk output of a double array.- Overrides:
writeDoubles
in classOutput
- Throws:
KryoException
-
isNativeOrder
private boolean isNativeOrder() -
getVarIntsEnabled
public boolean getVarIntsEnabled()Return current setting for variable length encoding of integers- Returns:
- current setting for variable length encoding of integers
-
setVarIntsEnabled
public void setVarIntsEnabled(boolean varIntsEnabled) Controls if a variable length encoding for integer types should be used when serializers suggest it.- Parameters:
varIntsEnabled
-
-