Class Output
java.lang.Object
java.io.OutputStream
com.esotericsoftware.kryo.io.Output
- All Implemented Interfaces:
Closeable, Flushable, AutoCloseable
- Direct Known Subclasses:
ByteBufferOutput, OutputChunked
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.
Encoding of integers: BIG_ENDIAN is used for storing fixed native size integer values LITTLE_ENDIAN is used for a variable
length encoding of integer values
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected byte[]protected intprotected intprotected OutputStreamprotected intprotected long -
Constructor Summary
ConstructorsConstructorDescriptionOutput()Creates an uninitialized Output.Output(byte[] buffer) Creates a new Output for writing to a byte array.Output(byte[] buffer, int maxBufferSize) Creates a new Output for writing to a byte array.Output(int bufferSize) Creates a new Output for writing to a byte array.Output(int bufferSize, int maxBufferSize) Creates a new Output for writing to a byte array.Output(OutputStream outputStream) Creates a new Output for writing to an OutputStream.Output(OutputStream outputStream, int bufferSize) Creates a new Output for writing to an OutputStream. -
Method Summary
Modifier and TypeMethodDescriptionvoidclear()Sets the position and total to zero.voidclose()Flushes any buffered bytes and closes the underlying OutputStream, if any.voidflush()Writes the buffered bytes to the underlying OutputStream, if any.byte[]Returns the buffer.static intintLength(int value, boolean optimizePositive) Returns the number of bytes that would be written withwriteInt(int, boolean).static intlongLength(long value, boolean optimizePositive) Returns the number of bytes that would be written withwriteLong(long, boolean).intposition()Returns the current position in the buffer.protected booleanrequire(int required) voidsetBuffer(byte[] buffer) Sets the buffer that will be written to.voidsetBuffer(byte[] buffer, int maxBufferSize) Sets the buffer that will be written to.voidsetOutputStream(OutputStream outputStream) Sets a new OutputStream.voidsetPosition(int position) Sets the current position in the buffer.byte[]toBytes()Returns a new byte array containing the bytes currently in the buffer between zero andposition().longtotal()Returns the total number of bytes written.voidwrite(byte[] bytes) Writes the bytes.voidwrite(byte[] bytes, int offset, int length) Writes the bytes.voidwrite(int value) Writes a byte.voidwriteAscii(String value) Writes a string that is known to contain only ASCII characters.private voidwriteAscii_slow(String value, int charCount) voidwriteBoolean(boolean value) Writes a 1 byte boolean.voidwriteByte(byte value) voidwriteByte(int value) voidwriteBytes(byte[] bytes) Writes the bytes.voidwriteBytes(byte[] bytes, int offset, int count) Writes the bytes.voidwriteChar(char value) Writes a 2 byte char.voidwriteChars(char[] object) Bulk output of a char array.voidwriteDouble(double value) Writes an 8 byte double.intwriteDouble(double value, double precision, boolean optimizePositive) Writes a 1-9 byte double with reduced precision.voidwriteDoubles(double[] object) Bulk output of a double array.voidwriteFloat(float value) Writes a 4 byte float.intwriteFloat(float value, float precision, boolean optimizePositive) Writes a 1-5 byte float with reduced precision.voidwriteFloats(float[] object) Bulk output of a float array.voidwriteInt(int value) Writes a 4 byte int.intwriteInt(int value, boolean optimizePositive) Writes a 1-5 byte int.voidwriteInts(int[] object) Bulk output of an int array.voidwriteInts(int[] object, boolean optimizePositive) Bulk output of an int array.voidwriteLong(long value) Writes an 8 byte long.intwriteLong(long value, boolean optimizePositive) Writes a 1-9 byte long.voidwriteLongs(long[] object) Bulk output of an long array.voidwriteLongs(long[] object, boolean optimizePositive) Bulk output of an long array.voidwriteShort(int value) Writes a 2 byte short.voidwriteShorts(short[] object) Bulk output of a short array.voidwriteString(CharSequence value) Writes the length and CharSequence as UTF8, or null.voidwriteString(String value) Writes the length and string, or null.private voidwriteString_slow(CharSequence value, int charCount, int charIndex) private voidwriteUtf8Length(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.intwriteVarInt(int value, boolean optimizePositive) Writes a 1-5 byte int.intwriteVarLong(long value, boolean optimizePositive) Writes a 1-9 byte long.
-
Field Details
-
maxCapacity
protected int maxCapacity -
total
protected long total -
position
protected int position -
capacity
protected int capacity -
buffer
protected byte[] buffer -
outputStream
-
-
Constructor Details
-
Output
public Output()Creates an uninitialized Output.setBuffer(byte[], int)must be called before the Output is used. -
Output
public Output(int bufferSize) Creates a new Output for writing to a byte array.- Parameters:
bufferSize- The initial and maximum size of the buffer. An exception is thrown if this size is exceeded.
-
Output
public Output(int bufferSize, int maxBufferSize) Creates a new Output for writing to a byte array.- Parameters:
bufferSize- The initial size of the buffer.maxBufferSize- The buffer is doubled as needed until it exceeds maxBufferSize and an exception is thrown. Can be -1 for no maximum.
-
Output
public Output(byte[] buffer) Creates a new Output for writing to a byte array.- See Also:
-
Output
public Output(byte[] buffer, int maxBufferSize) Creates a new Output for writing to a byte array.- See Also:
-
Output
Creates a new Output for writing to an OutputStream. A buffer size of 4096 is used. -
Output
Creates a new Output for writing to an OutputStream.
-
-
Method Details
-
getOutputStream
-
setOutputStream
Sets a new OutputStream. The position and total are reset, discarding any buffered bytes.- Parameters:
outputStream- May be null.
-
setBuffer
public void setBuffer(byte[] buffer) Sets the buffer that will be written to.setBuffer(byte[], int)is called with the specified buffer's length as the maxBufferSize. -
setBuffer
public void setBuffer(byte[] buffer, int maxBufferSize) Sets the buffer that will be written to. The position and total are reset, discarding any buffered bytes. TheOutputStreamis set to null.- Parameters:
maxBufferSize- The buffer is doubled as needed until it exceeds maxBufferSize and an exception is thrown.
-
getBuffer
public byte[] getBuffer()Returns the buffer. The bytes between zero andposition()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 andposition(). -
position
public int position()Returns the current position in the buffer. This is the number of bytes that have not been flushed. -
setPosition
public void setPosition(int position) Sets the current position in the buffer. -
total
public long total()Returns the total number of bytes written. This may include bytes that have not been flushed. -
clear
public void clear()Sets the position and total to zero. -
require
- Returns:
- true if the buffer has been resized.
- Throws:
KryoException
-
flush
Writes the buffered bytes to the underlying OutputStream, if any.- Specified by:
flushin interfaceFlushable- Overrides:
flushin classOutputStream- Throws:
KryoException
-
close
Flushes any buffered bytes and closes the underlying OutputStream, if any.- Specified by:
closein interfaceAutoCloseable- Specified by:
closein interfaceCloseable- Overrides:
closein classOutputStream- Throws:
KryoException
-
write
Writes a byte.- Specified by:
writein classOutputStream- Throws:
KryoException
-
write
Writes the bytes. Note the byte[] length is not written.- Overrides:
writein classOutputStream- Throws:
KryoException
-
write
Writes the bytes. Note the byte[] length is not written.- Overrides:
writein classOutputStream- Throws:
KryoException
-
writeByte
- Throws:
KryoException
-
writeByte
- Throws:
KryoException
-
writeBytes
Writes the bytes. Note the byte[] length is not written.- Throws:
KryoException
-
writeBytes
Writes the bytes. Note the byte[] length is not written.- Throws:
KryoException
-
writeInt
Writes a 4 byte int. Uses BIG_ENDIAN byte order.- Throws:
KryoException
-
writeInt
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.- 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
Writes a 1-5 byte int. It is guaranteed that a varible length encoding will be used.- 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().- 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().- 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().- 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.- Throws:
KryoException
-
writeFloat
Writes a 1-5 byte float with reduced precision.- 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. Uses BIG_ENDIAN byte order.- Throws:
KryoException
-
writeLong
Writes an 8 byte long. Uses BIG_ENDIAN byte order.- Throws:
KryoException
-
writeLong
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.- 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
Writes a 1-9 byte long. It is guaranteed that a varible length encoding will be used.- 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.- Throws:
KryoException
-
writeChar
Writes a 2 byte char. Uses BIG_ENDIAN byte order.- Throws:
KryoException
-
writeDouble
Writes an 8 byte double.- Throws:
KryoException
-
writeDouble
public int writeDouble(double value, double precision, boolean optimizePositive) throws KryoException Writes a 1-9 byte double with reduced precision.- Parameters:
optimizePositive- If true, small positive numbers will be more efficient (1 byte) and small negative numbers will be inefficient (9 bytes).- Throws:
KryoException
-
intLength
public static int intLength(int value, boolean optimizePositive) Returns the number of bytes that would be written withwriteInt(int, boolean). -
longLength
public static int longLength(long value, boolean optimizePositive) Returns the number of bytes that would be written withwriteLong(long, boolean). -
writeInts
Bulk output of an int array.- Throws:
KryoException
-
writeLongs
Bulk output of an long array.- Throws:
KryoException
-
writeInts
Bulk output of an int array.- Throws:
KryoException
-
writeLongs
Bulk output of an long array.- Throws:
KryoException
-
writeFloats
Bulk output of a float array.- Throws:
KryoException
-
writeShorts
Bulk output of a short array.- Throws:
KryoException
-
writeChars
Bulk output of a char array.- Throws:
KryoException
-
writeDoubles
Bulk output of a double array.- Throws:
KryoException
-