com.esotericsoftware.kryo.io
Class Output

java.lang.Object
  extended by java.io.OutputStream
      extended by com.esotericsoftware.kryo.io.Output
All Implemented Interfaces:
java.io.Closeable, java.io.Flushable
Direct Known Subclasses:
OutputChunked

public class Output
extends java.io.OutputStream

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.


Constructor Summary
Output()
          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(java.io.OutputStream outputStream)
          Creates a new Output for writing to an OutputStream.
Output(java.io.OutputStream outputStream, int bufferSize)
          Creates a new Output for writing to an OutputStream.
 
Method Summary
 void 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.
 byte[] getBuffer()
          Returns the buffer.
 java.io.OutputStream getOutputStream()
           
static int intLength(int value, boolean optimizePositive)
          Returns the number of bytes that would be written with writeInt(int, boolean).
static int longLength(long value, boolean optimizePositive)
          Returns the number of bytes that would be written with writeLong(long, boolean).
 int position()
          Returns the current position in the buffer.
 void setBuffer(byte[] buffer)
          Sets the buffer that will be written to.
 void setBuffer(byte[] buffer, int maxBufferSize)
          Sets the buffer that will be written to.
 void setOutputStream(java.io.OutputStream outputStream)
          Sets a new OutputStream.
 void setPosition(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 and position().
 int total()
          Returns the total number of bytes written.
 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 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 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 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 writeInt(int value)
          Writes a 4 byte int.
 int writeInt(int value, boolean optimizePositive)
          Writes a 1-5 byte int.
 void writeLong(long value)
          Writes an 8 byte long.
 int writeLong(long value, boolean optimizePositive)
          Writes a 1-9 byte long.
 void writeShort(int value)
          Writes a 2 byte short.
 void writeString(java.lang.CharSequence value)
          Writes the length and CharSequence as UTF8, or null.
 void writeString(java.lang.String value)
          Writes the length and string, or null.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

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.

Output

public Output(byte[] buffer)
Creates a new Output for writing to a byte array.

See Also:
setBuffer(byte[])

Output

public Output(byte[] buffer,
              int maxBufferSize)
Creates a new Output for writing to a byte array.

See Also:
setBuffer(byte[], int)

Output

public Output(java.io.OutputStream outputStream)
Creates a new Output for writing to an OutputStream. A buffer size of 4096 is used.


Output

public Output(java.io.OutputStream outputStream,
              int bufferSize)
Creates a new Output for writing to an OutputStream.

Method Detail

getOutputStream

public java.io.OutputStream getOutputStream()

setOutputStream

public void setOutputStream(java.io.OutputStream outputStream)
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. The OutputStream is 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 and 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 and position().


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 int 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.


flush

public void flush()
           throws KryoException
Writes the buffered bytes to the underlying OutputStream, if any.

Specified by:
flush in interface java.io.Flushable
Overrides:
flush in class java.io.OutputStream
Throws:
KryoException

close

public void close()
           throws KryoException
Flushes any buffered bytes and closes the underlying OutputStream, if any.

Specified by:
close in interface java.io.Closeable
Overrides:
close in class java.io.OutputStream
Throws:
KryoException

write

public void write(int value)
           throws KryoException
Writes a byte.

Specified by:
write in class java.io.OutputStream
Throws:
KryoException

write

public void write(byte[] bytes)
           throws KryoException
Writes the bytes. Note the byte[] length is not written.

Overrides:
write in class java.io.OutputStream
Throws:
KryoException

write

public void write(byte[] bytes,
                  int offset,
                  int length)
           throws KryoException
Writes the bytes. Note the byte[] length is not written.

Overrides:
write in class java.io.OutputStream
Throws:
KryoException

writeByte

public void writeByte(byte value)
               throws KryoException
Throws:
KryoException

writeByte

public void writeByte(int value)
               throws KryoException
Throws:
KryoException

writeBytes

public void writeBytes(byte[] bytes)
                throws KryoException
Writes the bytes. Note the byte[] length is not written.

Throws:
KryoException

writeBytes

public void writeBytes(byte[] bytes,
                       int offset,
                       int count)
                throws KryoException
Writes the bytes. Note the byte[] length is not written.

Throws:
KryoException

writeInt

public void writeInt(int value)
              throws KryoException
Writes a 4 byte int.

Throws:
KryoException

writeInt

public int writeInt(int value,
                    boolean optimizePositive)
             throws KryoException
Writes a 1-5 byte int.

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

public void writeString(java.lang.String value)
                 throws KryoException
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 using Input.readString() or Input.readStringBuilder().

Parameters:
value - May be null.
Throws:
KryoException

writeString

public void writeString(java.lang.CharSequence value)
                 throws KryoException
Writes the length and CharSequence as UTF8, or null. The string can be read using Input.readString() or Input.readStringBuilder().

Parameters:
value - May be null.
Throws:
KryoException

writeAscii

public void writeAscii(java.lang.String value)
                throws KryoException
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 than writeString(String). The string can be read using Input.readString() or Input.readStringBuilder().

Parameters:
value - May be null.
Throws:
KryoException

writeFloat

public void writeFloat(float value)
                throws KryoException
Writes a 4 byte float.

Throws:
KryoException

writeFloat

public int writeFloat(float value,
                      float precision,
                      boolean optimizePositive)
               throws KryoException
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

public void writeShort(int value)
                throws KryoException
Writes a 2 byte short.

Throws:
KryoException

writeLong

public void writeLong(long value)
               throws KryoException
Writes an 8 byte long.

Throws:
KryoException

writeLong

public int writeLong(long value,
                     boolean optimizePositive)
              throws KryoException
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

public void writeBoolean(boolean value)
                  throws KryoException
Writes a 1 byte boolean.

Throws:
KryoException

writeChar

public void writeChar(char value)
               throws KryoException
Writes a 2 byte char.

Throws:
KryoException

writeDouble

public void writeDouble(double value)
                 throws KryoException
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 with writeInt(int, boolean).


longLength

public static int longLength(long value,
                             boolean optimizePositive)
Returns the number of bytes that would be written with writeLong(long, boolean).