目录
两个read方法,两个readFully方法,skipBytes方法
读取单个或两个或四个字节的方法,readBoolean/Byte/UnsignedByte/Short/UnsignedShort/Char/Int
字段readBuffer和读取8个字节的长数字方法readLong/Float/Double
字段lineBuffer和readLine方法和两个readUTF方法
简介
package java.io;
/**
* 数据输入流允许应用程序以与机器无关的方式从底层输入流中读取原始Java数据类型。
* 应用程序使用数据输出流来写入数据,这些数据稍后可由数据输入流读取。
* <p>
* DataInputStream对于多线程访问不一定是安全的。
* 线程安全是可选的,是这个类中方法的用户的责任。
*
* @author Arthur van Hoff
* @see java.io.DataOutputStream
* @since JDK1.0
*/
public
class DataInputStream extends FilterInputStream implements DataInput
构造函数,字段bytearr,chararr
/**
* 使用指定的底层InputStream,创建DataInputStream。
*
* @param in the specified input stream
*/
public DataInputStream(InputStream in) {
super(in);
}
/**
* 由于需要readUTF,初始化时创建工作数组
*/
private byte bytearr[] = new byte[80];
private char chararr[] = new char[80];
两个read方法,两个readFully方法,skipBytes方法
/**
* 从包含的输入流中读取一定数量的字节,并将其存储到缓冲区数组b中。
* 实际读取的字节数作为整数返回。
* 此方法会阻塞,直到输入数据可用、检测到文件结束或抛出异常为止。
*
* <p>如果b为null,则抛出NullPointerException。
* 如果b的长度为0,则不读入字节,返回0;
* 否则,将有一个试图读取至少一个字节。
* 如果流位于文件的末尾,因此没有可用的字节,则返回-1;
* 否则,至少有一个字节被读取并存储到b中。
*
* <p>读取的第一个字节被存储到元素b[0]中,然后下一个字节存储到元素b[1]中,以此类推。
* 读取的字节数,最多等于b的长度。设k为实际读取的字节数;
* 这些字节将存储在元素b[0]到b[k-1]中,而不影响元素b[k]到b[b.length-1]。
*
* <p>read(b)方法的效果如下:<pre>
* read(b, 0, b.length)
* </pre></blockquote>
*
* @param b the buffer into which the data is read.
* @return the total number of bytes read into the buffer, or
* <code>-1</code> if there is no more data because the end
* of the stream has been reached.
* @exception IOException if the first byte cannot be read for any reason
* other than end of file, the stream has been closed and the underlying
* input stream does not support reading after close, or another I/O
* error occurs.
* @see java.io.FilterInputStream#in
* @see java.io.InputStream#read(byte[], int, int)
*/
public final int read(byte b[]) throws IOException {
return in.read(b, 0, b.length);
}
/**
* 从包含的输入流中读取最多len字节的数据到字节数组中。
* 尝试读取尽可能多的len字节,但可能会读取更小的数字,可能为零。
* 实际读取的字节数以整数的形式返回。
*
* <p> 此方法将一直阻塞,直到输入数据可用、检测到文件结束或抛出异常为止。
*
* <p> 如果len是零,那么没有字节被读取和返回0;
* 否则,将尝试读取至少一个字节。
* 如果没有字节可用,因为流在结束文件,值-1被返回;
* 否则,至少有一个字节被读取并存储到b中。
*
* <p> 读取的第一个字节被存储到元素b[off]中,第二个字节存储到元素b[off+1]中,以此类推。
* 读取的字节数,最多等于len。设k是实际读取的字节数;
* 这些字节将被存储在元素b[off]到b[off+k-1]中,而元素b[off+k]到b[off+len-1]不受影响。
*
* <p> 在每种情况下,元素b[0]到b[off]和元素b[off+len]到b[b.length-1]不受影响。
*
* @param b the buffer into which the data is read.
* @param off the start offset in the destination array <code>b</code>
* @param len the maximum number of bytes read.
* @return the total number of bytes read into the buffer, or
* <code>-1</code> if there is no more data because the end
* of the stream has been reached.
* @exception NullPointerException If <code>b</code> is <code>null</code>.
* @exception IndexOutOfBoundsException If <code>off</code> is negative,
* <code>len</code> is negative, or <code>len</code> is greater than
* <code>b.length - off</code>
* @exception IOException if the first byte cannot be read for any reason
* other than end of file, the stream has been closed and the underlying
* input stream does not support reading after close, or another I/O
* error occurs.
* @see java.io.FilterInputStream#in
* @see java.io.InputStream#read(byte[], int, int)
*/
public final int read(byte b[], int off, int len) throws IOException {
return in.read(b, off, len);
}
/**
* 参见DataInput的readFully方法的一般约定。
* <p>
* 从包含的输入流中读取此操作的字节。
*
* @param b the buffer into which the data is read.
* @exception EOFException if this input stream reaches the end before
* reading all the bytes.
* @exception IOException the stream has been closed and the contained
* input stream does not support reading after close, or
* another I/O error occurs.
* @see java.io.FilterInputStream#in
*/
public final void readFully(byte b[]) throws IOException {
readFully(b, 0, b.length);
}
/**
* 参见DataInput的readFully方法的一般约定。
* <p>
* 从包含的输入流中读取此操作的字节。
*
* @param b the buffer into which the data is read.
* @param off the start offset of the data.
* @param len the number of bytes to read.
* @exception EOFException if this input stream r