java.lang.Object java.io.InputStream java.io.FilterInputStream java.io.DataInputStream
public class DataInputStream
数据输入流允许应用程序以与机器无关方式从底层输入流中读取基本 Java 数据类型。应用程序可以使用数据输出流写入稍后由数据输入流读取的数据。
DataInputStream 对于多线程访问不一定是安全的。 线程安全是可选的,它由此类方法的使用者负责。
DataOutputStream
字段摘要 |
---|
从类 java.io.FilterInputStream 继承的字段 |
---|
in |
构造方法摘要 | |
---|---|
DataInputStream(InputStream in) 使用指定的底层 InputStream 创建一个 DataInputStream。 |
方法摘要 | |
---|---|
int |
read(byte[] b) 从包含的输入流中读取一定数量的字节,并将它们存储到缓冲区数组 b 中。 |
int |
read(byte[] b, int off, int len) 从包含的输入流中将最多 len 个字节读入一个 byte 数组中。 |
boolean |
readBoolean() 参见 DataInput 的 readBoolean 方法的常规协定。 |
byte |
readByte() 参见 DataInput 的 readByte 方法的常规协定。 |
char |
readChar() 参见 DataInput 的 readChar 方法的常规协定。 |
double |
readDouble() 参见 DataInput 的 readDouble 方法的常规协定。 |
float |
readFloat() 参见 DataInput 的 readFloat 方法的常规协定。 |
void |
readFully(byte[] b) 参见 DataInput 的 readFully 方法的常规协定。 |
void |
readFully(byte[] b, int off, int len) 参见 DataInput 的 readFully 方法的常规协定。 |
int |
readInt() 参见 DataInput 的 readInt 方法的常规协定。 |
String |
readLine() 已过时。 该方法无法将字节正确转换为字符。从 JDK 1.1 开始,读取文本行的首选方法是使用 BufferedReader.readLine() 方法。使用 DataInputStream 类读取文本行的程序可以改为使用 BufferedReader 类,只要将以下形式的代码:
替换为:DataInputStream d = new DataInputStream(in); BufferedReader d = new BufferedReader(new InputStreamReader(in)); |
long |
readLong() 参见 DataInput 的 readLong 方法的常规协定。 |
short |
readShort() 参见 DataInput 的 readShort 方法的常规协定。 |
int |
readUnsignedByte() 参见 DataInput 的 readUnsignedByte 方法的常规协定。 |
int |
readUnsignedShort() 参见 DataInput 的 readUnsignedShort 方法的常规协定。 |
String |
readUTF() 参见 DataInput 的 readUTF 方法的常规协定。 |
static String |
readUTF(DataInput in) 从流 in 中读取用 UTF-8 修改版格式编码的 Unicode 字符格式的字符串;然后以 String 形式返回此字符串。 |
int |
skipBytes(int n) 参见 DataInput 的 skipBytes 方法的常规协定。 |
从类 java.io.FilterInputStream 继承的方法 |
---|
available, close, mark, markSupported, read, reset, skip |
从类 java.lang.Object 继承的方法 |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
构造方法详细信息 |
---|
public DataInputStream(InputStream in)
in
- 指定输入流
方法详细信息 |
---|
public final int read(byte[] b) throws IOException
b
中。以整数形式返回实际读取的字节数。在输入数据可用、检测到文件末尾 (end of file) 或抛出异常之前,此方法将一直阻塞。
如果 b
为 null,则抛出 NullPointerException
。如果 b
的长度为 0,则不读取字节并返回 0
;否则,尝试读取至少一个字节。如果因为流位于文件末尾而没有字节可用,则返回值 -1
;否则至少读取一个字节并将其存储到 b
中。
将读取的第一个字节存储到元素 b[0]
中,将下一个字节存储到 b[1]
中,依此类推。读取的字节数至多等于 b
的长度。设 k
为实际读取的字节数;这些字节将存储在从 b[0]
到 b[k-1]
的元素中,b[k]
到 b[b.length-1]
的元素不受影响。
read(b)
方法与以下方法的效果相同:
read(b, 0, b.length)
FilterInputStream
中的
read
b
- 存储读取数据的缓冲区。
-1
。
IOException
- 如果不是因为流位于文件末尾而无法读取第一个字节;该流已关闭并且底层输入流在关闭后不支持读取操作;发生其他 I/O 错误。
FilterInputStream.in
,
InputStream.read(byte[], int, int)
public final int read(byte[] b, int off, int len) throws IOException
len
个字节读入一个 byte 数组中。尽量读取
len
个字节,但读取的字节数可能少于
len
个,也可能为零。以整数形式返回实际读取的字节数。
在输入数据可用、检测到文件末尾或抛出异常之前,此方法将阻塞。
如果 len
为零,则不读取任何字节并返回 0
;否则,尝试读取至少一个字节。如果因为流位于文件未尾而没有字节可用,则返回值 -1
;否则,至少读取一个字节并将其存储到 b
中。
将读取的第一个字节存储到元素 b[off]
中,将下一个字节存储到 b[off+1]
中,依此类推。读取的字节数至多等于 len
。设 k 为实际读取的字节数;这些字节将存储在 b[off]
到 b[off+
k-1]
的元素中,b[off+
k]
到 b[off+len-1]
的元素不受影响。
在所有情况下,b[0]
到 b[off]
的元素和 b[off+len]
到 b[b.length-1]
的元素都不受影响。
FilterInputStream
中的
read
b
- 存储读取数据的缓冲区。
off
- 目标数组
b
中的起始偏移量
len
- 读取的最大字节数。
-1
。
NullPointerException
- 如果
b
为
null
。
IndexOutOfBoundsException
- 如果
off
为负,
len
为负,或者
len
大于
b.length - off
IOException
- 如果不是因为流位于文件末尾而无法读取第一个字节;该流已关闭并且底层输入流在关闭后不支持读取操作;发生其他 I/O 错误。
FilterInputStream.in
,
InputStream.read(byte[], int, int)
public final void readFully(byte[] b) throws IOException
DataInput
的
readFully
方法的常规协定。
从包含的输入流中读取此操作需要的字节。
b
- 存储读取数据的缓冲区。
EOFException
- 如果此输入流在读取所有字节之前到达末尾。
IOException
- 该流已关闭并且包含的输入流在关闭后不支持读取操作,或者发生其他 I/O 错误。
FilterInputStream.in
public final void readFully(byte[] b, int off, int len) throws IOException
DataInput
的
readFully
方法的常规协定。
从包含的输入流中读取此操作需要的字节。
b
- 存储读取数据的缓冲区。
off
- 数据的起始偏移量。
len
- 要读取的字节数。
EOFException
- 如果此输入流在读取所有字节之前到达末尾。
IOException
- 该流已关闭并且包含的输入流在关闭后不支持读取操作,或者发生其他 I/O 错误。
FilterInputStream.in
public final int skipBytes(int n) throws IOException
DataInput
的
skipBytes
方法的常规协定。
从包含的输入流中读取此操作需要的字节。
n
- 要跳过的字节数。
IOException
- 如果包含的输入流不支持查找操作;该流已关闭并且包含的输入流在关闭后不支持读取操作;发生其他 I/O 错误。
public final boolean readBoolean() throws IOException
DataInput
的
readBoolean
方法的常规协定。
从包含的输入流中读取此操作需要的字节。
DataInput
中的
readBoolean
boolean
值。
EOFException
- 如果此输入流已经到达末尾。
IOException
- 该流已关闭并且包含的输入流在关闭后不支持读取操作,或者发生另其他 I/O 错误。
FilterInputStream.in
public final byte readByte() throws IOException
DataInput
的
readByte
方法的常规协定。
从所包含的输入流中读取此操作需要的字节。
byte
的形式表示。
EOFException
- 如果此输入流已经到达末尾。
IOException
- 该流已关闭并且包含的输入流在关闭后不支持读取操作,或者发生其他 I/O 错误。
FilterInputStream.in
public final int readUnsignedByte() throws IOException
DataInput
的
readUnsignedByte
方法的常规协定。
从包含的输入流中读取此操作需要的字节。
DataInput
中的
readUnsignedByte
EOFException
- 如果此输入流已经到达末尾。
IOException
- 该流已关闭并且包含的输入流在关闭后不支持读取操作,或者发生其他 I/O 错误。
FilterInputStream.in
public final short readShort() throws IOException
DataInput
的
readShort
方法的常规协定。
从包含的输入流中读取此操作需要的字节。
EOFException
- 如果此输入流在读取这两个字节之前到达末尾。
IOException
- 该流已关闭并且包含的输入流在关闭后不支持读取操作,或者发生其他 I/O 错误。
FilterInputStream.in
public final int readUnsignedShort() throws IOException
DataInput
的
readUnsignedShort
方法的常规协定。
从包含的输入流中读取此操作需要的字节。
DataInput
中的
readUnsignedShort
EOFException
- 如果此输入流在读取这两个字节之前到达末尾。
IOException
- 该流已关闭并且包含的输入流在关闭后不支持读取操作,或者发生其他 I/O 错误。
FilterInputStream.in
public final char readChar() throws IOException
DataInput
的
readChar
方法的常规协定。
从包含的输入流中读取此操作需要的字节。
char
。
EOFException
- 如果此输入流在读取这两个字节之前到达末尾。
IOException
- 该流已关闭并且包含的输入流在关闭后不支持读取操作,或者发生其他 I/O 错误。
FilterInputStream.in
public final int readInt() throws IOException
DataInput
的
readInt
方法的常规协定。
从包含的输入流中读取此操作需要的字节。
int
。
EOFException
- 如果此输入流在读取这四个字节之前到达末尾。
IOException
- 该流已关闭并且包含的输入流在关闭后不支持读取操作,或者发生其他 I/O 错误。
FilterInputStream.in
public final long readLong() throws IOException
DataInput
的
readLong
方法的常规协定。
从包含的输入流中读取此操作需要的字节。
long
。
EOFException
- 如果此输入流在读取这八个字节之前到达末尾。
IOException
- 该流已关闭并且包含的输入流在关闭后不支持读取操作,或者发生其他 I/O 错误。
FilterInputStream.in
public final float readFloat() throws IOException
DataInput
的
readFloat
方法的常规协定。
从包含的输入流中读取此操作需要的字节。
float
。
EOFException
- 如果此输入流在读取这四个字节之前到达末尾。
IOException
- 该流已关闭并且包含的输入流在关闭后不支持读取操作,或者发生其他 I/O 错误。
readInt()
,
Float.intBitsToFloat(int)
public final double readDouble() throws IOException
DataInput
的
readDouble
方法的常规协定。
从包含的输入流中读取此操作需要的字节。
DataInput
中的
readDouble
double
。
EOFException
- 如果此输入流在读取这八个字节之前到达末尾。
IOException
- 该流已关闭并且包含的输入流在关闭后不支持读取操作,或者发生其他 I/O 错误。
readLong()
,
Double.longBitsToDouble(long)
@Deprecated public final String readLine() throws IOException
BufferedReader.readLine()
方法。使用 DataInputStream
类读取文本行的程序可以改为使用 BufferedReader
类,只要将以下形式的代码:
替换为:DataInputStream d = new DataInputStream(in);
BufferedReader d = new BufferedReader(new InputStreamReader(in));
DataInput
的
readLine
方法的常规协定。
从包含的输入流中读取此操作需要的字节。
IOException
- 如果发生 I/O 错误。
BufferedReader.readLine()
,
FilterInputStream.in
public final String readUTF() throws IOException
DataInput
的
readUTF
方法的常规协定。
从包含的输入流中读取此操作需要的字节。
EOFException
- 如果此输入流在读取所有字节之前到达末尾。
IOException
- 该流已关闭并且包含的输入流在关闭后不支持读取操作,或者发生其他 I/O 错误。
UTFDataFormatException
- 如果这些字节不表示一个有效的、UTF-8 修改版编码的字符串。
readUTF(java.io.DataInput)
public static final String readUTF(DataInput in) throws IOException
in
中读取用
UTF-8 修改版格式编码的 Unicode 字符格式的字符串;然后以
String
形式返回此字符串。UTF-8 修改版表示形式的一些细节与
DataInput
的
readUTF
方法完全相同。
in
- 数据输入流。
EOFException
- 如果此输入流在读取所有字节之前到达末尾。
IOException
- 该流已关闭并且包含的输入流在关闭后不支持读取操作,或者发生其他 I/O 错误。
UTFDataFormatException
- 如果这些字节不表示一个有效的、UTF-8 修改版编码的 Unicode 字符串。
readUnsignedShort()