FileDocCategorySizeDatePackage
DataOutputStream.javaAPI DocJava SE 5 API14650Fri Aug 26 14:56:58 BST 2005java.io

DataOutputStream

public class DataOutputStream extends FilterOutputStream implements DataOutput
A data output stream lets an application write primitive Java data types to an output stream in a portable way. An application can then use a data input stream to read the data back in.
author
unascribed
version
1.43, 05/13/04
see
java.io.DataInputStream
since
JDK1.0

Fields Summary
protected int
written
The number of bytes written to the data output stream so far. If this counter overflows, it will be wrapped to Integer.MAX_VALUE.
private byte[]
bytearr
bytearr is initialized on demand by writeUTF
private byte[]
writeBuffer
Constructors Summary
public DataOutputStream(OutputStream out)
Creates a new data output stream to write data to the specified underlying output stream. The counter written is set to zero.

param
out the underlying output stream, to be saved for later use.
see
java.io.FilterOutputStream#out

 

                                                                       
       
	super(out);
    
Methods Summary
public voidflush()
Flushes this data output stream. This forces any buffered output bytes to be written out to the stream.

The flush method of DataOutputStream calls the flush method of its underlying output stream.

exception
IOException if an I/O error occurs.
see
java.io.FilterOutputStream#out
see
java.io.OutputStream#flush()

	out.flush();
    
private voidincCount(int value)
Increases the written counter by the specified value until it reaches Integer.MAX_VALUE.

        int temp = written + value;
        if (temp < 0) {
            temp = Integer.MAX_VALUE;
        }
        written = temp;
    
public final intsize()
Returns the current value of the counter written, the number of bytes written to this data output stream so far. If the counter overflows, it will be wrapped to Integer.MAX_VALUE.

return
the value of the written field.
see
java.io.DataOutputStream#written

	return written;
    
public synchronized voidwrite(int b)
Writes the specified byte (the low eight bits of the argument b) to the underlying output stream. If no exception is thrown, the counter written is incremented by 1.

Implements the write method of OutputStream.

param
b the byte to be written.
exception
IOException if an I/O error occurs.
see
java.io.FilterOutputStream#out

	out.write(b);
        incCount(1);
    
public synchronized voidwrite(byte[] b, int off, int len)
Writes len bytes from the specified byte array starting at offset off to the underlying output stream. If no exception is thrown, the counter written is incremented by len.

param
b the data.
param
off the start offset in the data.
param
len the number of bytes to write.
exception
IOException if an I/O error occurs.
see
java.io.FilterOutputStream#out

	out.write(b, off, len);
	incCount(len);
    
public final voidwriteBoolean(boolean v)
Writes a boolean to the underlying output stream as a 1-byte value. The value true is written out as the value (byte)1; the value false is written out as the value (byte)0. If no exception is thrown, the counter written is incremented by 1.

param
v a boolean value to be written.
exception
IOException if an I/O error occurs.
see
java.io.FilterOutputStream#out

	out.write(v ? 1 : 0);
	incCount(1);
    
public final voidwriteByte(int v)
Writes out a byte to the underlying output stream as a 1-byte value. If no exception is thrown, the counter written is incremented by 1.

param
v a byte value to be written.
exception
IOException if an I/O error occurs.
see
java.io.FilterOutputStream#out

	out.write(v);
        incCount(1);
    
public final voidwriteBytes(java.lang.String s)
Writes out the string to the underlying output stream as a sequence of bytes. Each character in the string is written out, in sequence, by discarding its high eight bits. If no exception is thrown, the counter written is incremented by the length of s.

param
s a string of bytes to be written.
exception
IOException if an I/O error occurs.
see
java.io.FilterOutputStream#out

	int len = s.length();
	for (int i = 0 ; i < len ; i++) {
	    out.write((byte)s.charAt(i));
	}
	incCount(len);
    
public final voidwriteChar(int v)
Writes a char to the underlying output stream as a 2-byte value, high byte first. If no exception is thrown, the counter written is incremented by 2.

param
v a char value to be written.
exception
IOException if an I/O error occurs.
see
java.io.FilterOutputStream#out

        out.write((v >>> 8) & 0xFF);
        out.write((v >>> 0) & 0xFF);
        incCount(2);
    
public final voidwriteChars(java.lang.String s)
Writes a string to the underlying output stream as a sequence of characters. Each character is written to the data output stream as if by the writeChar method. If no exception is thrown, the counter written is incremented by twice the length of s.

param
s a String value to be written.
exception
IOException if an I/O error occurs.
see
java.io.DataOutputStream#writeChar(int)
see
java.io.FilterOutputStream#out

        int len = s.length();
        for (int i = 0 ; i < len ; i++) {
            int v = s.charAt(i);
            out.write((v >>> 8) & 0xFF); 
            out.write((v >>> 0) & 0xFF); 
        }
        incCount(len * 2);
    
public final voidwriteDouble(double v)
Converts the double argument to a long using the doubleToLongBits method in class Double, and then writes that long value to the underlying output stream as an 8-byte quantity, high byte first. If no exception is thrown, the counter written is incremented by 8.

param
v a double value to be written.
exception
IOException if an I/O error occurs.
see
java.io.FilterOutputStream#out
see
java.lang.Double#doubleToLongBits(double)

	writeLong(Double.doubleToLongBits(v));
    
public final voidwriteFloat(float v)
Converts the float argument to an int using the floatToIntBits method in class Float, and then writes that int value to the underlying output stream as a 4-byte quantity, high byte first. If no exception is thrown, the counter written is incremented by 4.

param
v a float value to be written.
exception
IOException if an I/O error occurs.
see
java.io.FilterOutputStream#out
see
java.lang.Float#floatToIntBits(float)

	writeInt(Float.floatToIntBits(v));
    
public final voidwriteInt(int v)
Writes an int to the underlying output stream as four bytes, high byte first. If no exception is thrown, the counter written is incremented by 4.

param
v an int to be written.
exception
IOException if an I/O error occurs.
see
java.io.FilterOutputStream#out

        out.write((v >>> 24) & 0xFF);
        out.write((v >>> 16) & 0xFF);
        out.write((v >>>  8) & 0xFF);
        out.write((v >>>  0) & 0xFF);
        incCount(4);
    
public final voidwriteLong(long v)
Writes a long to the underlying output stream as eight bytes, high byte first. In no exception is thrown, the counter written is incremented by 8.

param
v a long to be written.
exception
IOException if an I/O error occurs.
see
java.io.FilterOutputStream#out


                                                                    
           
        writeBuffer[0] = (byte)(v >>> 56);
        writeBuffer[1] = (byte)(v >>> 48);
        writeBuffer[2] = (byte)(v >>> 40);
        writeBuffer[3] = (byte)(v >>> 32);
        writeBuffer[4] = (byte)(v >>> 24);
        writeBuffer[5] = (byte)(v >>> 16);
        writeBuffer[6] = (byte)(v >>>  8);
        writeBuffer[7] = (byte)(v >>>  0);
        out.write(writeBuffer, 0, 8);
	incCount(8);
    
public final voidwriteShort(int v)
Writes a short to the underlying output stream as two bytes, high byte first. If no exception is thrown, the counter written is incremented by 2.

param
v a short to be written.
exception
IOException if an I/O error occurs.
see
java.io.FilterOutputStream#out

        out.write((v >>> 8) & 0xFF);
        out.write((v >>> 0) & 0xFF);
        incCount(2);
    
public final voidwriteUTF(java.lang.String str)
Writes a string to the underlying output stream using modified UTF-8 encoding in a machine-independent manner.

First, two bytes are written to the output stream as if by the writeShort method giving the number of bytes to follow. This value is the number of bytes actually written out, not the length of the string. Following the length, each character of the string is output, in sequence, using the modified UTF-8 encoding for the character. If no exception is thrown, the counter written is incremented by the total number of bytes written to the output stream. This will be at least two plus the length of str, and at most two plus thrice the length of str.

param
str a string to be written.
exception
IOException if an I/O error occurs.

        writeUTF(str, this);
    
static intwriteUTF(java.lang.String str, java.io.DataOutput out)
Writes a string to the specified DataOutput using modified UTF-8 encoding in a machine-independent manner.

First, two bytes are written to out as if by the writeShort method giving the number of bytes to follow. This value is the number of bytes actually written out, not the length of the string. Following the length, each character of the string is output, in sequence, using the modified UTF-8 encoding for the character. If no exception is thrown, the counter written is incremented by the total number of bytes written to the output stream. This will be at least two plus the length of str, and at most two plus thrice the length of str.

param
str a string to be written.
param
out destination to write to
return
The number of bytes written out.
exception
IOException if an I/O error occurs.

        int strlen = str.length();
	int utflen = 0;
	int c, count = 0;
 
        /* use charAt instead of copying String to char array */
	for (int i = 0; i < strlen; i++) {
            c = str.charAt(i);
	    if ((c >= 0x0001) && (c <= 0x007F)) {
		utflen++;
	    } else if (c > 0x07FF) {
		utflen += 3;
	    } else {
		utflen += 2;
	    }
	}

	if (utflen > 65535)
	    throw new UTFDataFormatException(
                "encoded string too long: " + utflen + " bytes");

        byte[] bytearr = null;
        if (out instanceof DataOutputStream) {
            DataOutputStream dos = (DataOutputStream)out;
            if(dos.bytearr == null || (dos.bytearr.length < (utflen+2)))
                dos.bytearr = new byte[(utflen*2) + 2];
            bytearr = dos.bytearr;
        } else {
            bytearr = new byte[utflen+2];
        }
     
	bytearr[count++] = (byte) ((utflen >>> 8) & 0xFF);
	bytearr[count++] = (byte) ((utflen >>> 0) & 0xFF);  
        
        int i=0;
        for (i=0; i<strlen; i++) {
           c = str.charAt(i);
           if (!((c >= 0x0001) && (c <= 0x007F))) break;
           bytearr[count++] = (byte) c;
        }
	
	for (;i < strlen; i++){
            c = str.charAt(i);
	    if ((c >= 0x0001) && (c <= 0x007F)) {
		bytearr[count++] = (byte) c;
               
	    } else if (c > 0x07FF) {
		bytearr[count++] = (byte) (0xE0 | ((c >> 12) & 0x0F));
		bytearr[count++] = (byte) (0x80 | ((c >>  6) & 0x3F));
		bytearr[count++] = (byte) (0x80 | ((c >>  0) & 0x3F));
	    } else {
		bytearr[count++] = (byte) (0xC0 | ((c >>  6) & 0x1F));
		bytearr[count++] = (byte) (0x80 | ((c >>  0) & 0x3F));
	    }
	}
        out.write(bytearr, 0, utflen+2);
        return utflen + 2;