DataInputStreampublic class DataInputStream extends FilterInputStream implements DataInputA data input stream lets an application read primitive Java data
types from an underlying input stream in a machine-independent
way. An application uses a data output stream to write data that
can later be read by a data input stream.
DataInputStream is not necessarily safe for multithreaded access.
Thread safety is optional and is the responsibility of users of
methods in this class. |
Fields Summary |
---|
private byte[] | bytearrworking arrays initialized on demand by readUTF | private char[] | chararr | private byte[] | readBuffer | private char[] | lineBuffer |
Constructors Summary |
---|
public DataInputStream(InputStream in)Creates a DataInputStream that uses the specified
underlying InputStream.
super(in);
|
Methods Summary |
---|
public final int | read(byte[] b)Reads some number of bytes from the contained input stream and
stores them into the buffer array b . The number of
bytes actually read is returned as an integer. This method blocks
until input data is available, end of file is detected, or an
exception is thrown.
If b is null, a NullPointerException is
thrown. If the length of b is zero, then no bytes are
read and 0 is returned; otherwise, there is an attempt
to read at least one byte. If no byte is available because the
stream is at end of file, the value -1 is returned;
otherwise, at least one byte is read and stored into b .
The first byte read is stored into element b[0] , the
next one into b[1] , and so on. The number of bytes read
is, at most, equal to the length of b . Let k
be the number of bytes actually read; these bytes will be stored in
elements b[0] through b[k-1] , leaving
elements b[k] through b[b.length-1]
unaffected.
The read(b) method has the same effect as:
read(b, 0, b.length)
return in.read(b, 0, b.length);
| public final int | read(byte[] b, int off, int len)Reads up to len bytes of data from the contained
input stream into an array of bytes. An attempt is made to read
as many as len bytes, but a smaller number may be read,
possibly zero. The number of bytes actually read is returned as an
integer.
This method blocks until input data is available, end of file is
detected, or an exception is thrown.
If len is zero, then no bytes are read and
0 is returned; otherwise, there is an attempt to read at
least one byte. If no byte is available because the stream is at end of
file, the value -1 is returned; otherwise, at least one
byte is read and stored into b .
The first byte read is stored into element b[off] , the
next one into b[off+1] , and so on. The number of bytes read
is, at most, equal to len . Let k be the number of
bytes actually read; these bytes will be stored in elements
b[off] through b[off+ k-1] ,
leaving elements b[off+ k] through
b[off+len-1] unaffected.
In every case, elements b[0] through
b[off] and elements b[off+len] through
b[b.length-1] are unaffected.
return in.read(b, off, len);
| public final boolean | readBoolean()See the general contract of the readBoolean
method of DataInput .
Bytes for this operation are read from the contained
input stream.
int ch = in.read();
if (ch < 0)
throw new EOFException();
return (ch != 0);
| public final byte | readByte()See the general contract of the readByte
method of DataInput .
Bytes
for this operation are read from the contained
input stream.
int ch = in.read();
if (ch < 0)
throw new EOFException();
return (byte)(ch);
| public final char | readChar()See the general contract of the readChar
method of DataInput .
Bytes
for this operation are read from the contained
input stream.
int ch1 = in.read();
int ch2 = in.read();
if ((ch1 | ch2) < 0)
throw new EOFException();
return (char)((ch1 << 8) + (ch2 << 0));
| public final double | readDouble()See the general contract of the readDouble
method of DataInput .
Bytes
for this operation are read from the contained
input stream.
return Double.longBitsToDouble(readLong());
| public final float | readFloat()See the general contract of the readFloat
method of DataInput .
Bytes
for this operation are read from the contained
input stream.
return Float.intBitsToFloat(readInt());
| public final void | readFully(byte[] b)See the general contract of the readFully
method of DataInput .
Bytes
for this operation are read from the contained
input stream.
readFully(b, 0, b.length);
| public final void | readFully(byte[] b, int off, int len)See the general contract of the readFully
method of DataInput .
Bytes
for this operation are read from the contained
input stream.
if (len < 0)
throw new IndexOutOfBoundsException();
int n = 0;
while (n < len) {
int count = in.read(b, off + n, len - n);
if (count < 0)
throw new EOFException();
n += count;
}
| public final int | readInt()See the general contract of the readInt
method of DataInput .
Bytes
for this operation are read from the contained
input stream.
int ch1 = in.read();
int ch2 = in.read();
int ch3 = in.read();
int ch4 = in.read();
if ((ch1 | ch2 | ch3 | ch4) < 0)
throw new EOFException();
return ((ch1 << 24) + (ch2 << 16) + (ch3 << 8) + (ch4 << 0));
| public final java.lang.String | readLine()See the general contract of the readLine
method of DataInput .
Bytes
for this operation are read from the contained
input stream.
char buf[] = lineBuffer;
if (buf == null) {
buf = lineBuffer = new char[128];
}
int room = buf.length;
int offset = 0;
int c;
loop: while (true) {
switch (c = in.read()) {
case -1:
case '\n":
break loop;
case '\r":
int c2 = in.read();
if ((c2 != '\n") && (c2 != -1)) {
if (!(in instanceof PushbackInputStream)) {
this.in = new PushbackInputStream(in);
}
((PushbackInputStream)in).unread(c2);
}
break loop;
default:
if (--room < 0) {
buf = new char[offset + 128];
room = buf.length - offset - 1;
System.arraycopy(lineBuffer, 0, buf, 0, offset);
lineBuffer = buf;
}
buf[offset++] = (char) c;
break;
}
}
if ((c == -1) && (offset == 0)) {
return null;
}
return String.copyValueOf(buf, 0, offset);
| public final long | readLong()See the general contract of the readLong
method of DataInput .
Bytes
for this operation are read from the contained
input stream.
readFully(readBuffer, 0, 8);
return (((long)readBuffer[0] << 56) +
((long)(readBuffer[1] & 255) << 48) +
((long)(readBuffer[2] & 255) << 40) +
((long)(readBuffer[3] & 255) << 32) +
((long)(readBuffer[4] & 255) << 24) +
((readBuffer[5] & 255) << 16) +
((readBuffer[6] & 255) << 8) +
((readBuffer[7] & 255) << 0));
| public final short | readShort()See the general contract of the readShort
method of DataInput .
Bytes
for this operation are read from the contained
input stream.
int ch1 = in.read();
int ch2 = in.read();
if ((ch1 | ch2) < 0)
throw new EOFException();
return (short)((ch1 << 8) + (ch2 << 0));
| public final java.lang.String | readUTF()See the general contract of the readUTF
method of DataInput .
Bytes
for this operation are read from the contained
input stream.
return readUTF(this);
| public static final java.lang.String | readUTF(java.io.DataInput in)Reads from the
stream in a representation
of a Unicode character string encoded in
modified UTF-8 format;
this string of characters is then returned as a String .
The details of the modified UTF-8 representation
are exactly the same as for the readUTF
method of DataInput .
int utflen = in.readUnsignedShort();
byte[] bytearr = null;
char[] chararr = null;
if (in instanceof DataInputStream) {
DataInputStream dis = (DataInputStream)in;
if (dis.bytearr.length < utflen){
dis.bytearr = new byte[utflen*2];
dis.chararr = new char[utflen*2];
}
chararr = dis.chararr;
bytearr = dis.bytearr;
} else {
bytearr = new byte[utflen];
chararr = new char[utflen];
}
int c, char2, char3;
int count = 0;
int chararr_count=0;
in.readFully(bytearr, 0, utflen);
while (count < utflen) {
c = (int) bytearr[count] & 0xff;
if (c > 127) break;
count++;
chararr[chararr_count++]=(char)c;
}
while (count < utflen) {
c = (int) bytearr[count] & 0xff;
switch (c >> 4) {
case 0: case 1: case 2: case 3: case 4: case 5: case 6: case 7:
/* 0xxxxxxx*/
count++;
chararr[chararr_count++]=(char)c;
break;
case 12: case 13:
/* 110x xxxx 10xx xxxx*/
count += 2;
if (count > utflen)
throw new UTFDataFormatException(
"malformed input: partial character at end");
char2 = (int) bytearr[count-1];
if ((char2 & 0xC0) != 0x80)
throw new UTFDataFormatException(
"malformed input around byte " + count);
chararr[chararr_count++]=(char)(((c & 0x1F) << 6) |
(char2 & 0x3F));
break;
case 14:
/* 1110 xxxx 10xx xxxx 10xx xxxx */
count += 3;
if (count > utflen)
throw new UTFDataFormatException(
"malformed input: partial character at end");
char2 = (int) bytearr[count-2];
char3 = (int) bytearr[count-1];
if (((char2 & 0xC0) != 0x80) || ((char3 & 0xC0) != 0x80))
throw new UTFDataFormatException(
"malformed input around byte " + (count-1));
chararr[chararr_count++]=(char)(((c & 0x0F) << 12) |
((char2 & 0x3F) << 6) |
((char3 & 0x3F) << 0));
break;
default:
/* 10xx xxxx, 1111 xxxx */
throw new UTFDataFormatException(
"malformed input around byte " + count);
}
}
// The number of chars produced may be less than utflen
return new String(chararr, 0, chararr_count);
| public final int | readUnsignedByte()See the general contract of the readUnsignedByte
method of DataInput .
Bytes
for this operation are read from the contained
input stream.
int ch = in.read();
if (ch < 0)
throw new EOFException();
return ch;
| public final int | readUnsignedShort()See the general contract of the readUnsignedShort
method of DataInput .
Bytes
for this operation are read from the contained
input stream.
int ch1 = in.read();
int ch2 = in.read();
if ((ch1 | ch2) < 0)
throw new EOFException();
return (ch1 << 8) + (ch2 << 0);
| public final int | skipBytes(int n)See the general contract of the skipBytes
method of DataInput .
Bytes for this operation are read from the contained
input stream.
int total = 0;
int cur = 0;
while ((total<n) && ((cur = (int) in.skip(n-total)) > 0)) {
total += cur;
}
return total;
|
|