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:
Pool.Poolable
,java.io.Closeable
,java.io.Flushable
,java.lang.AutoCloseable
- Direct Known Subclasses:
UnsafeByteBufferOutput
public class ByteBufferOutput extends Output
AnOutput
that uses a ByteBuffer rather than a byte[].Note that the byte[]
buffer
is not used. Code taking an Output and expecting the byte[] to be used may not work correctly.- Author:
- Roman Levenstein
, Nathan Sweet
-
-
Field Summary
Fields Modifier and Type Field Description protected java.nio.ByteBuffer
byteBuffer
-
Fields inherited from class com.esotericsoftware.kryo.io.Output
buffer, capacity, maxCapacity, outputStream, position, total, varEncoding
-
-
Constructor Summary
Constructors Constructor Description ByteBufferOutput()
Creates an uninitialized Output,setBuffer(ByteBuffer)
must be called before the Output is used.ByteBufferOutput(int bufferSize)
Creates a new Output for writing to a directByteBuffer
.ByteBufferOutput(int bufferSize, int maxBufferSize)
Creates a new Output for writing to a direct ByteBuffer.ByteBufferOutput(java.io.OutputStream outputStream)
ByteBufferOutput(java.io.OutputStream outputStream, int bufferSize)
ByteBufferOutput(java.nio.ByteBuffer buffer)
Creates a new Output for writing to a ByteBuffer.ByteBufferOutput(java.nio.ByteBuffer buffer, int maxBufferSize)
Creates a new Output for writing to a ByteBuffer.
-
Method Summary
All Methods Instance Methods Concrete Methods Deprecated Methods Modifier and Type Method Description void
close()
Flushes any buffered bytes and closes the underlying OutputStream, if any.void
flush()
Flushes the buffered bytes.byte[]
getBuffer()
Deprecated.java.nio.ByteBuffer
getByteBuffer()
Returns the buffer.java.io.OutputStream
getOutputStream()
protected boolean
require(int required)
Ensures the buffer is large enough to read the specified number of bytes.void
reset()
Sets the position and total to 0.void
setBuffer(byte[] buffer)
Deprecated.void
setBuffer(byte[] buffer, int maxBufferSize)
Deprecated.void
setBuffer(byte[] bytes, int offset, int count)
Allocates a new direct ByteBuffer with the specified bytes and sets it as the new buffer.void
setBuffer(java.nio.ByteBuffer buffer)
Sets a new buffer to write to.void
setBuffer(java.nio.ByteBuffer buffer, int maxBufferSize)
Sets a new buffer to write to.void
setPosition(int position)
Sets the current position in the buffer.byte[]
toBytes()
Allocates and returns a new byte[] containing the bytes currently in the buffer between 0 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(java.lang.String value)
Writes a string that is known to contain only ASCII characters.void
writeBoolean(boolean value)
Writes a 1 byte boolean.void
writeBooleans(boolean[] array, int offset, int count)
Writes a boolean array in bulk.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[] array, int offset, int count)
Writes a char array in bulk.void
writeDouble(double value)
Writes an 8 byte double.void
writeDoubles(double[] array, int offset, int count)
Writes a double array in bulk.void
writeFloat(float value)
Writes a 4 byte float.void
writeFloats(float[] array, int offset, int count)
Writes a float array in bulk.void
writeInt(int value)
Writes a 4 byte int.void
writeInts(int[] array, int offset, int count)
Writes an int array in bulk.void
writeLong(long value)
Writes an 8 byte long.void
writeLongs(long[] array, int offset, int count)
Writes a long array in bulk.void
writeShort(int value)
Writes a 2 byte short.void
writeShorts(short[] array, int offset, int count)
Writes a short array in bulk.void
writeString(java.lang.String value)
Writes the length and string, or null.int
writeVarInt(int value, boolean optimizePositive)
Writes a 1-5 byte int.int
writeVarIntFlag(boolean flag, int value, boolean optimizePositive)
Writes a 1-5 byte int, encoding the boolean value with a bit flag.int
writeVarLong(long value, boolean optimizePositive)
Writes a 1-9 byte long.-
Methods inherited from class com.esotericsoftware.kryo.io.Output
getMaxCapacity, getVariableLengthEncoding, intLength, longLength, position, setOutputStream, setVariableLengthEncoding, total, varIntLength, varLongLength, writeInt, writeInts, writeLong, writeLongs, writeVarDouble, writeVarFloat
-
-
-
-
Constructor Detail
-
ByteBufferOutput
public ByteBufferOutput()
Creates an uninitialized Output,setBuffer(ByteBuffer)
must be called before the Output is used.
-
ByteBufferOutput
public ByteBufferOutput(int bufferSize)
Creates a new Output for writing to a directByteBuffer
.- Parameters:
bufferSize
- The size of the buffer. An exception is thrown if more bytes than this are written andflush()
does not empty the buffer.
-
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
- Ifflush()
does not empty the buffer, the buffer is doubled as needed until it exceeds maxBufferSize and an exception is thrown. Can be -1 for no maximum.
-
ByteBufferOutput
public ByteBufferOutput(java.nio.ByteBuffer buffer)
Creates a new Output for writing to a ByteBuffer.
-
ByteBufferOutput
public ByteBufferOutput(java.nio.ByteBuffer buffer, int maxBufferSize)
Creates a new Output for writing to a ByteBuffer.- Parameters:
maxBufferSize
- Ifflush()
does not empty the buffer, the buffer is doubled as needed until it exceeds maxBufferSize and an exception is thrown. Can be -1 for no maximum.
-
ByteBufferOutput
public ByteBufferOutput(java.io.OutputStream outputStream)
- See Also:
Output(OutputStream)
-
ByteBufferOutput
public ByteBufferOutput(java.io.OutputStream outputStream, int bufferSize)
- See Also:
Output(OutputStream, int)
-
-
Method Detail
-
getOutputStream
public java.io.OutputStream getOutputStream()
- Overrides:
getOutputStream
in classOutput
-
getBuffer
public byte[] getBuffer()
Deprecated.ThrowsUnsupportedOperationException
because this output uses a ByteBuffer, not a byte[].- Overrides:
getBuffer
in classOutput
- See Also:
getByteBuffer()
-
setBuffer
public void setBuffer(byte[] buffer)
Deprecated.ThrowsUnsupportedOperationException
because this output uses a ByteBuffer, not a byte[].- Overrides:
setBuffer
in classOutput
- See Also:
getByteBuffer()
-
setBuffer
public void setBuffer(byte[] buffer, int maxBufferSize)
Deprecated.ThrowsUnsupportedOperationException
because this output uses a ByteBuffer, not a byte[].- Overrides:
setBuffer
in classOutput
maxBufferSize
- IfOutput.flush()
does not empty the buffer, the buffer is doubled as needed until it exceeds maxBufferSize and an exception is thrown. Can be -1 for no maximum.- See Also:
getByteBuffer()
-
setBuffer
public void setBuffer(byte[] bytes, int offset, int count)
Allocates a new direct ByteBuffer with the specified bytes and sets it as the new buffer.- See Also:
setBuffer(ByteBuffer)
-
setBuffer
public void setBuffer(java.nio.ByteBuffer buffer)
Sets a new buffer to write to. The max size is the buffer's length.- See Also:
setBuffer(ByteBuffer, int)
-
setBuffer
public void setBuffer(java.nio.ByteBuffer buffer, int maxBufferSize)
Sets a new buffer to write to. The bytes are not copied, the old buffer is discarded and the new buffer used in its place. The position and capacity are set to match the specified buffer. The total is reset. TheOutputStream
is set to null.- Parameters:
maxBufferSize
- Ifflush()
does not empty the buffer, the buffer is doubled as needed until it exceeds maxBufferSize and an exception is thrown. Can be -1 for no maximum.
-
getByteBuffer
public java.nio.ByteBuffer getByteBuffer()
Returns the buffer. The bytes between zero andOutput.position()
are the data that has been written.
-
toBytes
public byte[] toBytes()
Description copied from class:Output
Allocates and returns a new byte[] containing the bytes currently in the buffer between 0 andOutput.position()
.
-
setPosition
public void setPosition(int position)
Description copied from class:Output
Sets the current position in the buffer.- Overrides:
setPosition
in classOutput
-
reset
public void reset()
Description copied from class:Output
Sets the position and total to 0.- Specified by:
reset
in interfacePool.Poolable
- Overrides:
reset
in classOutput
-
require
protected boolean require(int required) throws KryoException
Description copied from class:Output
Ensures the buffer is large enough to read the specified number of bytes.- Overrides:
require
in classOutput
- Returns:
- true if the buffer has been resized.
- Throws:
KryoException
-
flush
public void flush() throws KryoException
Description copied from class:Output
Flushes the buffered bytes. The default implementation writes the buffered bytes to theOutputStream
, if any, and sets the position to 0. Can be overridden to flush the bytes somewhere else.- Specified by:
flush
in interfacejava.io.Flushable
- Overrides:
flush
in classOutput
- Throws:
KryoException
-
close
public void close() throws KryoException
Description copied from class:Output
Flushes any buffered bytes and closes the underlying OutputStream, if any.- Specified by:
close
in interfacejava.lang.AutoCloseable
- Specified by:
close
in interfacejava.io.Closeable
- Overrides:
close
in classOutput
- Throws:
KryoException
-
write
public void write(int value) throws KryoException
Description copied from class:Output
Writes a byte.- Overrides:
write
in classOutput
- Throws:
KryoException
-
write
public void write(byte[] bytes) throws KryoException
Description copied from class:Output
Writes the bytes. Note the number of bytes is not written.- Overrides:
write
in classOutput
- Throws:
KryoException
-
write
public void write(byte[] bytes, int offset, int length) throws KryoException
Description copied from class:Output
Writes the bytes. Note the number of bytes is not written.- Overrides:
write
in classOutput
- Throws:
KryoException
-
writeByte
public void writeByte(byte value) throws KryoException
- Overrides:
writeByte
in classOutput
- Throws:
KryoException
-
writeByte
public void writeByte(int value) throws KryoException
- Overrides:
writeByte
in classOutput
- Throws:
KryoException
-
writeBytes
public void writeBytes(byte[] bytes) throws KryoException
Description copied from class:Output
Writes the bytes. Note the number of bytes is not written.- Overrides:
writeBytes
in classOutput
- Throws:
KryoException
-
writeBytes
public void writeBytes(byte[] bytes, int offset, int count) throws KryoException
Description copied from class:Output
Writes the bytes. Note the number of bytes is not written.- Overrides:
writeBytes
in classOutput
- Throws:
KryoException
-
writeInt
public void writeInt(int value) throws KryoException
Description copied from class:Output
Writes a 4 byte int.- Overrides:
writeInt
in classOutput
- Throws:
KryoException
-
writeVarInt
public int writeVarInt(int value, boolean optimizePositive) throws KryoException
Description copied from class:Output
Writes a 1-5 byte int.- Overrides:
writeVarInt
in classOutput
optimizePositive
- If true, small positive numbers will be more efficient (1 byte) and small negative numbers will be inefficient (5 bytes).- Returns:
- The number of bytes written.
- Throws:
KryoException
- See Also:
Output.varIntLength(int, boolean)
-
writeVarIntFlag
public int writeVarIntFlag(boolean flag, int value, boolean optimizePositive) throws KryoException
Description copied from class:Output
Writes a 1-5 byte int, encoding the boolean value with a bit flag.- Overrides:
writeVarIntFlag
in classOutput
optimizePositive
- If true, small positive numbers will be more efficient (1 byte) and small negative numbers will be inefficient (5 bytes).- Returns:
- The number of bytes written.
- Throws:
KryoException
-
writeLong
public void writeLong(long value) throws KryoException
Description copied from class:Output
Writes an 8 byte long.- Overrides:
writeLong
in classOutput
- Throws:
KryoException
-
writeVarLong
public int writeVarLong(long value, boolean optimizePositive) throws KryoException
Description copied from class:Output
Writes a 1-9 byte long.- Overrides:
writeVarLong
in classOutput
optimizePositive
- If true, small positive numbers will be more efficient (1 byte) and small negative numbers will be inefficient (9 bytes).- Returns:
- The number of bytes written.
- Throws:
KryoException
- See Also:
Output.varLongLength(long, boolean)
-
writeFloat
public void writeFloat(float value) throws KryoException
Description copied from class:Output
Writes a 4 byte float.- Overrides:
writeFloat
in classOutput
- Throws:
KryoException
-
writeDouble
public void writeDouble(double value) throws KryoException
Description copied from class:Output
Writes an 8 byte double.- Overrides:
writeDouble
in classOutput
- Throws:
KryoException
-
writeShort
public void writeShort(int value) throws KryoException
Description copied from class:Output
Writes a 2 byte short.- Overrides:
writeShort
in classOutput
- Throws:
KryoException
-
writeChar
public void writeChar(char value) throws KryoException
Description copied from class:Output
Writes a 2 byte char.- Overrides:
writeChar
in classOutput
- Throws:
KryoException
-
writeBoolean
public void writeBoolean(boolean value) throws KryoException
Description copied from class:Output
Writes a 1 byte boolean.- Overrides:
writeBoolean
in classOutput
- Throws:
KryoException
-
writeString
public void writeString(java.lang.String value) throws KryoException
Description copied from class:Output
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,Output.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
-
writeAscii
public void writeAscii(java.lang.String value) throws KryoException
Description copied from class:Output
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 thanOutput.writeString(String)
. The string can be read usingInput.readString()
orInput.readStringBuilder()
.- Overrides:
writeAscii
in classOutput
- Parameters:
value
- May be null.- Throws:
KryoException
-
writeInts
public void writeInts(int[] array, int offset, int count) throws KryoException
Description copied from class:Output
Writes an int array in bulk. This may be more efficient than writing them individually.- Overrides:
writeInts
in classOutput
- Throws:
KryoException
-
writeLongs
public void writeLongs(long[] array, int offset, int count) throws KryoException
Description copied from class:Output
Writes a long array in bulk. This may be more efficient than writing them individually.- Overrides:
writeLongs
in classOutput
- Throws:
KryoException
-
writeFloats
public void writeFloats(float[] array, int offset, int count) throws KryoException
Description copied from class:Output
Writes a float array in bulk. This may be more efficient than writing them individually.- Overrides:
writeFloats
in classOutput
- Throws:
KryoException
-
writeDoubles
public void writeDoubles(double[] array, int offset, int count) throws KryoException
Description copied from class:Output
Writes a double array in bulk. This may be more efficient than writing them individually.- Overrides:
writeDoubles
in classOutput
- Throws:
KryoException
-
writeShorts
public void writeShorts(short[] array, int offset, int count) throws KryoException
Description copied from class:Output
Writes a short array in bulk. This may be more efficient than writing them individually.- Overrides:
writeShorts
in classOutput
- Throws:
KryoException
-
writeChars
public void writeChars(char[] array, int offset, int count) throws KryoException
Description copied from class:Output
Writes a char array in bulk. This may be more efficient than writing them individually.- Overrides:
writeChars
in classOutput
- Throws:
KryoException
-
writeBooleans
public void writeBooleans(boolean[] array, int offset, int count) throws KryoException
Description copied from class:Output
Writes a boolean array in bulk. This may be more efficient than writing them individually.- Overrides:
writeBooleans
in classOutput
- Throws:
KryoException
-
-