java.io
Class ObjectOutputStream.BlockDataOutputStream

java.lang.Object
  extended byjava.io.OutputStream
      extended byjava.io.ObjectOutputStream.BlockDataOutputStream
All Implemented Interfaces:
DataOutput
Enclosing class:
ObjectOutputStream

private static class ObjectOutputStream.BlockDataOutputStream
extends OutputStream
implements DataOutput

Buffered output stream with two modes: in default mode, outputs data in same format as DataOutputStream; in "block data" mode, outputs data bracketed by block data markers (see object serialization specification for details).


Field Summary
private  boolean blkmode
          block data mode
private  byte[] buf
          buffer for writing general/block data
private  char[] cbuf
          char buffer for fast string writes
private static int CHAR_BUF_SIZE
          (tunable) length of char buffer (for writing strings)
private  DataOutputStream dout
          loopback stream (for data writes that span data blocks)
private  byte[] hbuf
          buffer for writing block data headers
private static int MAX_BLOCK_SIZE
          maximum data block length
private static int MAX_HEADER_SIZE
          maximum data block header length
private  OutputStream out
          underlying output stream
private  int pos
          current offset into buf
 
Constructor Summary
(package private) ObjectOutputStream.BlockDataOutputStream(OutputStream out)
          Creates new BlockDataOutputStream on top of given underlying stream.
 
Method Summary
 void close()
          Closes this output stream and releases any system resources associated with this stream.
(package private)  void drain()
          Writes all buffered data from this stream to the underlying stream, but does not flush underlying stream.
 void flush()
          Flushes this output stream and forces any buffered output bytes to be written out.
(package private)  boolean getBlockDataMode()
          Returns true if the stream is currently in block data mode, false otherwise.
(package private)  long getUTFLength(String s)
          Returns the length in bytes of the UTF encoding of the given string.
(package private)  boolean setBlockDataMode(boolean mode)
          Sets block data mode to the given mode (true == on, false == off) and returns the previous mode value.
 void write(byte[] b)
          Writes to the output stream all the bytes in array b.
 void write(byte[] b, int off, int len)
          Writes len bytes from array b, in order, to the output stream.
(package private)  void write(byte[] b, int off, int len, boolean copy)
          Writes specified span of byte values from given array.
 void write(int b)
          Writes to the output stream the eight low-order bits of the argument b.
private  void writeBlockHeader(int len)
          Writes block data header.
 void writeBoolean(boolean v)
          Writes a boolean value to this output stream.
(package private)  void writeBooleans(boolean[] v, int off, int len)
           
 void writeByte(int v)
          Writes to the output stream the eight low- order bits of the argument v.
 void writeBytes(String s)
          Writes a string to the output stream.
 void writeChar(int v)
          Writes a char value, wich is comprised of two bytes, to the output stream.
(package private)  void writeChars(char[] v, int off, int len)
           
 void writeChars(String s)
          Writes every character in the string s, to the output stream, in order, two bytes per character.
 void writeDouble(double v)
          Writes a double value, which is comprised of eight bytes, to the output stream.
(package private)  void writeDoubles(double[] v, int off, int len)
           
 void writeFloat(float v)
          Writes a float value, which is comprised of four bytes, to the output stream.
(package private)  void writeFloats(float[] v, int off, int len)
           
 void writeInt(int v)
          Writes an int value, which is comprised of four bytes, to the output stream.
(package private)  void writeInts(int[] v, int off, int len)
           
 void writeLong(long v)
          Writes a long value, which is comprised of eight bytes, to the output stream.
(package private)  void writeLongs(long[] v, int off, int len)
           
(package private)  void writeLongUTF(String s)
          Writes given string in "long" UTF format.
(package private)  void writeLongUTF(String s, long utflen)
          Writes given string in "long" UTF format, where the UTF encoding length of the string is already known.
 void writeShort(int v)
          Writes two bytes to the output stream to represent the value of the argument.
(package private)  void writeShorts(short[] v, int off, int len)
           
 void writeUTF(String s)
          Writes two bytes of length information to the output stream, followed by the Java modified UTF representation of every character in the string s.
(package private)  void writeUTF(String s, long utflen)
          Writes the given string in UTF format.
private  void writeUTFBody(String s)
          Writes the "body" (i.e., the UTF representation minus the 2-byte or 8-byte length header) of the UTF encoding for the given string.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

MAX_BLOCK_SIZE

private static final int MAX_BLOCK_SIZE
maximum data block length

See Also:
Constant Field Values

MAX_HEADER_SIZE

private static final int MAX_HEADER_SIZE
maximum data block header length

See Also:
Constant Field Values

CHAR_BUF_SIZE

private static final int CHAR_BUF_SIZE
(tunable) length of char buffer (for writing strings)

See Also:
Constant Field Values

buf

private final byte[] buf
buffer for writing general/block data


hbuf

private final byte[] hbuf
buffer for writing block data headers


cbuf

private final char[] cbuf
char buffer for fast string writes


blkmode

private boolean blkmode
block data mode


pos

private int pos
current offset into buf


out

private final OutputStream out
underlying output stream


dout

private final DataOutputStream dout
loopback stream (for data writes that span data blocks)

Constructor Detail

ObjectOutputStream.BlockDataOutputStream

ObjectOutputStream.BlockDataOutputStream(OutputStream out)
Creates new BlockDataOutputStream on top of given underlying stream. Block data mode is turned off by default.

Method Detail

setBlockDataMode

boolean setBlockDataMode(boolean mode)
                   throws IOException
Sets block data mode to the given mode (true == on, false == off) and returns the previous mode value. If the new mode is the same as the old mode, no action is taken. If the new mode differs from the old mode, any buffered data is flushed before switching to the new mode.

Throws:
IOException

getBlockDataMode

boolean getBlockDataMode()
Returns true if the stream is currently in block data mode, false otherwise.


write

public void write(int b)
           throws IOException
Description copied from interface: DataOutput
Writes to the output stream the eight low-order bits of the argument b. The 24 high-order bits of b are ignored.

Specified by:
write in interface DataOutput
Specified by:
write in class OutputStream
Parameters:
b - the byte.
Throws:
IOException - if an I/O error occurs. In particular, an IOException may be thrown if the output stream has been closed.

write

public void write(byte[] b)
           throws IOException
Description copied from interface: DataOutput
Writes to the output stream all the bytes in array b. If b is null, a NullPointerException is thrown. If b.length is zero, then no bytes are written. Otherwise, the byte b[0] is written first, then b[1], and so on; the last byte written is b[b.length-1].

Specified by:
write in interface DataOutput
Overrides:
write in class OutputStream
Parameters:
b - the data.
Throws:
IOException - if an I/O error occurs.
See Also:
OutputStream.write(byte[], int, int)

write

public void write(byte[] b,
                  int off,
                  int len)
           throws IOException
Description copied from interface: DataOutput
Writes len bytes from array b, in order, to the output stream. If b is null, a NullPointerException is thrown. If off is negative, or len is negative, or off+len is greater than the length of the array b, then an IndexOutOfBoundsException is thrown. If len is zero, then no bytes are written. Otherwise, the byte b[off] is written first, then b[off+1], and so on; the last byte written is b[off+len-1].

Specified by:
write in interface DataOutput
Overrides:
write in class OutputStream
Parameters:
b - the data.
off - the start offset in the data.
len - the number of bytes to write.
Throws:
IOException - if an I/O error occurs. In particular, an IOException is thrown if the output stream is closed.

flush

public void flush()
           throws IOException
Description copied from class: OutputStream
Flushes this output stream and forces any buffered output bytes to be written out. The general contract of flush is that calling it is an indication that, if any bytes previously written have been buffered by the implementation of the output stream, such bytes should immediately be written to their intended destination.

The flush method of OutputStream does nothing.

Overrides:
flush in class OutputStream
Throws:
IOException - if an I/O error occurs.

close

public void close()
           throws IOException
Description copied from class: OutputStream
Closes this output stream and releases any system resources associated with this stream. The general contract of close is that it closes the output stream. A closed stream cannot perform output operations and cannot be reopened.

The close method of OutputStream does nothing.

Overrides:
close in class OutputStream
Throws:
IOException - if an I/O error occurs.

write

void write(byte[] b,
           int off,
           int len,
           boolean copy)
     throws IOException
Writes specified span of byte values from given array. If copy is true, copies the values to an intermediate buffer before writing them to underlying stream (to avoid exposing a reference to the original byte array).

Throws:
IOException

drain

void drain()
     throws IOException
Writes all buffered data from this stream to the underlying stream, but does not flush underlying stream.

Throws:
IOException

writeBlockHeader

private void writeBlockHeader(int len)
                       throws IOException
Writes block data header. Data blocks shorter than 256 bytes are prefixed with a 2-byte header; all others start with a 5-byte header.

Throws:
IOException

writeBoolean

public void writeBoolean(boolean v)
                  throws IOException
Description copied from interface: DataOutput
Writes a boolean value to this output stream. If the argument v is true, the value (byte)1 is written; if v is false, the value (byte)0 is written. The byte written by this method may be read by the readBoolean method of interface DataInput, which will then return a boolean equal to v.

Specified by:
writeBoolean in interface DataOutput
Parameters:
v - the boolean to be written.
Throws:
IOException - if an I/O error occurs.

writeByte

public void writeByte(int v)
               throws IOException
Description copied from interface: DataOutput
Writes to the output stream the eight low- order bits of the argument v. The 24 high-order bits of v are ignored. (This means that writeByte does exactly the same thing as write for an integer argument.) The byte written by this method may be read by the readByte method of interface DataInput, which will then return a byte equal to (byte)v.

Specified by:
writeByte in interface DataOutput
Parameters:
v - the byte value to be written.
Throws:
IOException - if an I/O error occurs.

writeChar

public void writeChar(int v)
               throws IOException
Description copied from interface: DataOutput
Writes a char value, wich is comprised of two bytes, to the output stream. The byte values to be written, in the order shown, are:


 (byte)(0xff & (v >> 8))
 (byte)(0xff & v)
 

The bytes written by this method may be read by the readChar method of interface DataInput , which will then return a char equal to (char)v.

Specified by:
writeChar in interface DataOutput
Parameters:
v - the char value to be written.
Throws:
IOException - if an I/O error occurs.

writeShort

public void writeShort(int v)
                throws IOException
Description copied from interface: DataOutput
Writes two bytes to the output stream to represent the value of the argument. The byte values to be written, in the order shown, are:


 (byte)(0xff & (v >> 8))
 (byte)(0xff & v)
  

The bytes written by this method may be read by the readShort method of interface DataInput , which will then return a short equal to (short)v.

Specified by:
writeShort in interface DataOutput
Parameters:
v - the short value to be written.
Throws:
IOException - if an I/O error occurs.

writeInt

public void writeInt(int v)
              throws IOException
Description copied from interface: DataOutput
Writes an int value, which is comprised of four bytes, to the output stream. The byte values to be written, in the order shown, are:


 (byte)(0xff & (v >> 24))
 (byte)(0xff & (v >> 16))
 (byte)(0xff & (v >>    8))
 (byte)(0xff & v)
 

The bytes written by this method may be read by the readInt method of interface DataInput , which will then return an int equal to v.

Specified by:
writeInt in interface DataOutput
Parameters:
v - the int value to be written.
Throws:
IOException - if an I/O error occurs.

writeFloat

public void writeFloat(float v)
                throws IOException
Description copied from interface: DataOutput
Writes a float value, which is comprised of four bytes, to the output stream. It does this as if it first converts this float value to an int in exactly the manner of the Float.floatToIntBits method and then writes the int value in exactly the manner of the writeInt method. The bytes written by this method may be read by the readFloat method of interface DataInput, which will then return a float equal to v.

Specified by:
writeFloat in interface DataOutput
Parameters:
v - the float value to be written.
Throws:
IOException - if an I/O error occurs.

writeLong

public void writeLong(long v)
               throws IOException
Description copied from interface: DataOutput
Writes a long value, which is comprised of eight bytes, to the output stream. The byte values to be written, in the order shown, are:


 (byte)(0xff & (v >> 56))
 (byte)(0xff & (v >> 48))
 (byte)(0xff & (v >> 40))
 (byte)(0xff & (v >> 32))
 (byte)(0xff & (v >> 24))
 (byte)(0xff & (v >> 16))
 (byte)(0xff & (v >>  8))
 (byte)(0xff & v)
 

The bytes written by this method may be read by the readLong method of interface DataInput , which will then return a long equal to v.

Specified by:
writeLong in interface DataOutput
Parameters:
v - the long value to be written.
Throws:
IOException - if an I/O error occurs.

writeDouble

public void writeDouble(double v)
                 throws IOException
Description copied from interface: DataOutput
Writes a double value, which is comprised of eight bytes, to the output stream. It does this as if it first converts this double value to a long in exactly the manner of the Double.doubleToLongBits method and then writes the long value in exactly the manner of the writeLong method. The bytes written by this method may be read by the readDouble method of interface DataInput, which will then return a double equal to v.

Specified by:
writeDouble in interface DataOutput
Parameters:
v - the double value to be written.
Throws:
IOException - if an I/O error occurs.

writeBytes

public void writeBytes(String s)
                throws IOException
Description copied from interface: DataOutput
Writes a string to the output stream. For every character in the string s, taken in order, one byte is written to the output stream. If s is null, a NullPointerException is thrown.

If s.length is zero, then no bytes are written. Otherwise, the character s[0] is written first, then s[1], and so on; the last character written is s[s.length-1]. For each character, one byte is written, the low-order byte, in exactly the manner of the writeByte method . The high-order eight bits of each character in the string are ignored.

Specified by:
writeBytes in interface DataOutput
Parameters:
s - the string of bytes to be written.
Throws:
IOException - if an I/O error occurs.

writeChars

public void writeChars(String s)
                throws IOException
Description copied from interface: DataOutput
Writes every character in the string s, to the output stream, in order, two bytes per character. If s is null, a NullPointerException is thrown. If s.length is zero, then no characters are written. Otherwise, the character s[0] is written first, then s[1], and so on; the last character written is s[s.length-1]. For each character, two bytes are actually written, high-order byte first, in exactly the manner of the writeChar method.

Specified by:
writeChars in interface DataOutput
Parameters:
s - the string value to be written.
Throws:
IOException - if an I/O error occurs.

writeUTF

public void writeUTF(String s)
              throws IOException
Description copied from interface: DataOutput
Writes two bytes of length information to the output stream, followed by the Java modified UTF representation of every character in the string s. If s is null, a NullPointerException is thrown. Each character in the string s is converted to a group of one, two, or three bytes, depending on the value of the character.

If a character c is in the range \u0001 through \u007f, it is represented by one byte:

(byte)c 

If a character c is \u0000 or is in the range \u0080 through \u07ff, then it is represented by two bytes, to be written in the order shown:


 (byte)(0xc0 | (0x1f & (c >> 6)))
 (byte)(0x80 | (0x3f & c))
  

If a character c is in the range \u0800 through uffff, then it is represented by three bytes, to be written in the order shown:


 (byte)(0xe0 | (0x0f & (c >> 12)))
 (byte)(0x80 | (0x3f & (c >>  6)))
 (byte)(0x80 | (0x3f & c))
  

First, the total number of bytes needed to represent all the characters of s is calculated. If this number is larger than 65535, then a UTFDataFormatException is thrown. Otherwise, this length is written to the output stream in exactly the manner of the writeShort method; after this, the one-, two-, or three-byte representation of each character in the string s is written.

The bytes written by this method may be read by the readUTF method of interface DataInput , which will then return a String equal to s.

Specified by:
writeUTF in interface DataOutput
Parameters:
s - the string value to be written.
Throws:
IOException - if an I/O error occurs.

writeBooleans

void writeBooleans(boolean[] v,
                   int off,
                   int len)
             throws IOException
Throws:
IOException

writeChars

void writeChars(char[] v,
                int off,
                int len)
          throws IOException
Throws:
IOException

writeShorts

void writeShorts(short[] v,
                 int off,
                 int len)
           throws IOException
Throws:
IOException

writeInts

void writeInts(int[] v,
               int off,
               int len)
         throws IOException
Throws:
IOException

writeFloats

void writeFloats(float[] v,
                 int off,
                 int len)
           throws IOException
Throws:
IOException

writeLongs

void writeLongs(long[] v,
                int off,
                int len)
          throws IOException
Throws:
IOException

writeDoubles

void writeDoubles(double[] v,
                  int off,
                  int len)
            throws IOException
Throws:
IOException

getUTFLength

long getUTFLength(String s)
Returns the length in bytes of the UTF encoding of the given string.


writeUTF

void writeUTF(String s,
              long utflen)
        throws IOException
Writes the given string in UTF format. This method is used in situations where the UTF encoding length of the string is already known; specifying it explicitly avoids a prescan of the string to determine its UTF length.

Throws:
IOException

writeLongUTF

void writeLongUTF(String s)
            throws IOException
Writes given string in "long" UTF format. "Long" UTF format is identical to standard UTF, except that it uses an 8 byte header (instead of the standard 2 bytes) to convey the UTF encoding length.

Throws:
IOException

writeLongUTF

void writeLongUTF(String s,
                  long utflen)
            throws IOException
Writes given string in "long" UTF format, where the UTF encoding length of the string is already known.

Throws:
IOException

writeUTFBody

private void writeUTFBody(String s)
                   throws IOException
Writes the "body" (i.e., the UTF representation minus the 2-byte or 8-byte length header) of the UTF encoding for the given string.

Throws:
IOException