-
- All Known Subinterfaces:
-
ImageInputStream
,ImageOutputStream
,JNLPRandomAccessFile
,ObjectInput
- 所有已知实现类:
-
DataInputStream
,FileCacheImageInputStream
,FileCacheImageOutputStream
,FileImageInputStream
,FileImageOutputStream
,ImageInputStreamImpl
,ImageOutputStreamImpl
,MemoryCacheImageInputStream
,MemoryCacheImageOutputStream
,ObjectInputStream
,RandomAccessFile
public interface DataInput
DataInput
接口提供从二进制流读取字节并从其中重建任何Java原语类型的数据。 还有一个从modified UTF-8格式的数据重建String
的设施。这个界面中的所有读取程序通常都是如果在读取所需的字节数之前到达文件结尾,则抛出一个
EOFException
(这是一种IOException
)。 如果由于除文件结尾之外的任何原因而无法读取任何字节,则抛出IOException
以外的EOFException
。 特别地,如果输入流已经被关闭,则可以抛出IOException
。Modified UTF-8
DataInput和DataOutput接口的实现表示Unicode字符串,格式是UTF-8的一个修改。 (有关标准UTF-8格式的信息,请参见“Unicode标准版本4.0的 Unicode编码格式” 3.9节)。 请注意,在下表中,最高位显示在最左侧的列中。
All characters in the range '\u0001'
to'\u007F'
are represented by a single byte:Bit Values Byte 1 0 bits 6-0 The null character '\u0000'
and characters in the range'\u0080'
to'\u07FF'
are represented by a pair of bytes:Bit Values Byte 1 1 1 0 bits 10-6 Byte 2 1 0 bits 5-0 char
values in the range'\u0800'
to'\uFFFF'
are represented by three bytes:Bit Values Byte 1 1 1 1 0 bits 15-12 Byte 2 1 0 bits 11-6 Byte 3 1 0 bits 5-0 此格式与标准UTF-8格式之间的差异如下:
- 空字节
'\u0000'
以2字节格式编码,而不是1字节,因此编码字符串从不具有嵌入的空值。 - 仅使用1字节,2字节和3字节格式。
- Supplementary characters以代理对的形式表示。
- 从以下版本开始:
- 1.0
- 另请参见:
-
DataInputStream
,DataOutput
-
-
方法摘要
所有方法 接口方法 抽象方法 Modifier and Type 方法 描述 boolean
readBoolean()
读取一个输入字节,并返回true
如果该字节不为零,false
如果该字节是零。byte
readByte()
读取并返回一个输入字节。char
readChar()
读取两个输入字节并返回一个char
值。double
readDouble()
读取八个输入字节并返回一个double
值。float
readFloat()
读取四个输入字节并返回一个float
值。void
readFully(byte[] b)
从输入流读取一些字节,并将它们存储到缓冲器阵列b
。void
readFully(byte[] b, int off, int len)
从输入流读取len
个字节。int
readInt()
读取四个输入字节并返回一个int
值。String
readLine()
从输入流读取下一行文本。long
readLong()
读取八个输入字节并返回一个long
值。short
readShort()
读取两个输入字节并返回一个short
值。int
readUnsignedByte()
读取一个输入字节,将其扩展为类型int
,并返回结果,因此在0
至255
。int
readUnsignedShort()
读取两个输入字节,并返回0
至65535
范围内的int
值。String
readUTF()
读取已使用 modified UTF-8格式编码的字符串。int
skipBytes(int n)
尝试从输入流中跳过n
字节的数据,丢弃跳过的字节。
-
-
-
方法详细信息
-
readFully
void readFully(byte[] b) throws IOException
从输入流中读取一些字节,并将其存储到缓冲区b
。 读取的字节数等于b
的长度。该方法阻塞,直到出现以下情况之一:
-
b.length
字节的输入数据可用,在这种情况下会进行正常的返回。 - 检测到文件结束,在这种情况下抛出一个
EOFException
。 - 发生I / O错误,在这种情况下,抛出
IOException
以外的EOFException
。
如果
b
为null
,则抛出NullPointerException
。 如果b.length
为零,则不会读取字节。 否则,读取的第一个字节存储到元素b[0]
,下一个字节存入b[1]
,依此类推。 如果从该方法抛出异常,则可能使用来自输入流的数据更新了b
一些但并非全部字节。- 参数
-
b
- 读取数据的缓冲区。 - 异常
-
NullPointerException
- 如果b
是null
。 -
EOFException
- 如果此流在读取所有字节之前到达结束。 -
IOException
- 如果发生I / O错误。
-
-
readFully
void readFully(byte[] b, int off, int len) throws IOException
从输入流读取len
个字节。该方法阻塞,直到出现以下情况之一:
-
len
字节的输入数据可用,在这种情况下将进行正常的返回。 - 检测到文件结束,在这种情况下抛出一个
EOFException
。 - 发生I / O错误,在这种情况下,抛出
IOException
以外的EOFException
。
如果
b
为null
,则抛出NullPointerException
。 如果off
为负数,或len
为负数,或off+len
大于数组b
的长度,则抛出IndexOutOfBoundsException
。 如果len
为零,则不会读取任何字节。 否则,第一个字节读取存储到元素b[off]
,下一个字节存入b[off+1]
,依此类推。 读取的字节数最多等于len
。- 参数
-
b
- 读取数据的缓冲区。 -
off
- 指定数据数组b
的偏移量的int。 -
len
- 一个int指定要读取的字节数。 - 异常
-
NullPointerException
- 如果b
是null
。 -
IndexOutOfBoundsException
- 如果off
为负,len
,否则为len
,大于b.length - off
。 -
EOFException
- 如果此流在读取所有字节之前到达结束。 -
IOException
- 如果发生I / O错误。
-
-
skipBytes
int skipBytes(int n) throws IOException
尝试从输入流中跳过n
个字节的数据,丢弃跳过的字节。 但是,它可能跳过一些较小数量的字节,可能会为零。 这可能是由许多条件中的任何一个引起的 在n
字节之前已经跳过的文件到达结束只有一种可能性。 这种方法永远不会抛出一个EOFException
。 返回实际跳过的字节数。- 参数
-
n
- 要跳过的字节数。 - 结果
- 实际跳过的字节数。
- 异常
-
IOException
- 如果发生I / O错误。
-
readBoolean
boolean readBoolean() throws IOException
读取一个输入字节,并返回true
如果该字节不为零,false
如果该字节是零。 该方法适用于读取接口DataOutput
的writeBoolean
方法写入的字节。- 结果
-
boolean
值读。 - 异常
-
EOFException
- 如果此流在读取所有字节之前到达结束。 -
IOException
- 如果发生I / O错误。
-
readByte
byte readByte() throws IOException
读取并返回一个输入字节。 该字节被视为-128
至127
范围内的-128
符号值。 该方法适用于读取由接口DataOutput
的writeByte
方法写入的字节。- 结果
- 读取8位值。
- 异常
-
EOFException
- 如果此流在读取所有字节之前到达结束。 -
IOException
- 如果发生I / O错误。
-
readUnsignedByte
int readUnsignedByte() throws IOException
读取一个输入字节,将其扩展到类型int
,并返回结果,因此在0
到255
。 此方法适用于读取由写入的字节writeByte
接口的方法DataOutput
,如果参数writeByte
的用意是在范围内的值0
通过255
。- 结果
- 读取无符号的8位值。
- 异常
-
EOFException
- 如果此流在读取所有字节之前到达结束。 -
IOException
- 如果发生I / O错误。
-
readShort
short readShort() throws IOException
读取两个输入字节并返回一个short
值。 让a
成为第一个字节,b
是第二个字节。 返回的值为:(short)((a << 8) | (b & 0xff))
DataOutput
的writeShort
方法写入的字节。- 结果
- 读取16位值。
- 异常
-
EOFException
- 如果此流在读取所有字节之前到达结束。 -
IOException
- 如果发生I / O错误。
-
readUnsignedShort
int readUnsignedShort() throws IOException
读取两个输入字节,并返回0
到65535
的int
值。 让a
是第一个字节读取,而b
是第二个字节。 返回的值为:(((a & 0xff) << 8) | (b & 0xff))
writeShort
接口的方法DataOutput
,如果参数writeShort
的用意是在范围内的值0
通过65535
。- 结果
- 读取无符号16位值。
- 异常
-
EOFException
- 如果此流在读取所有字节之前到达结束。 -
IOException
- 如果发生I / O错误。
-
readChar
char readChar() throws IOException
读取两个输入字节并返回一个char
值。 让a
是第一个字节读取,而b
是第二个字节。 返回的值为:(char)((a << 8) | (b & 0xff))
writeChar
接口DataOutput
编写的字节。- 结果
-
char
值读取。 - 异常
-
EOFException
- 如果此流在读取所有字节之前到达结束。 -
IOException
- 如果发生I / O错误。
-
readInt
int readInt() throws IOException
读取四个输入字节并返回一个int
值。 让a-d
是第一到第四个字节读取。 返回的值为:(((a & 0xff) << 24) | ((b & 0xff) << 16) | ((c & 0xff) << 8) | (d & 0xff))
DataOutput
的writeInt
方法写入的字节。- 结果
-
int
值读取。 - 异常
-
EOFException
- 如果此流在读取所有字节之前到达结束。 -
IOException
- 如果发生I / O错误。
-
readLong
long readLong() throws IOException
读取八个输入字节并返回一个long
值。 让a-h
是第一个到第八个字节读取。 返回的值为:(((long)(a & 0xff) << 56) | ((long)(b & 0xff) << 48) | ((long)(c & 0xff) << 40) | ((long)(d & 0xff) << 32) | ((long)(e & 0xff) << 24) | ((long)(f & 0xff) << 16) | ((long)(g & 0xff) << 8) | ((long)(h & 0xff)))
该方法适用于读取
writeLong
接口DataOutput
编写的字节。- 结果
-
long
值读。 - 异常
-
EOFException
- 如果此流在读取所有字节之前到达结束。 -
IOException
- 如果发生I / O错误。
-
readFloat
float readFloat() throws IOException
读取四个输入字节并返回一个float
值。 这是通过首先按照readInt
方法构建一个int
值,然后以float
的方式将该int
值转换为Float.intBitsToFloat
。 该方法适用于读取由writeFloat
接口DataOutput
编写的字节。- 结果
-
float
读取值。 - 异常
-
EOFException
- 如果此流在读取所有字节之前到达结束。 -
IOException
- 如果发生I / O错误。
-
readDouble
double readDouble() throws IOException
读取八个输入字节并返回一个double
值。 它通过首先按照readLong
方法的方式构建一个long
值,然后以double
的方式将该long
值转换为Double.longBitsToDouble
。 该方法适用于读取writeDouble
接口DataOutput
编写的字节。- 结果
-
读取
double
值。 - 异常
-
EOFException
- 如果此流在读取所有字节之前到达结束。 -
IOException
- 如果发生I / O错误。
-
readLine
String readLine() throws IOException
从输入流读取下一行文本。 它读取连续字节,将每个字节分别转换为字符,直到遇到行终止符或文件结尾; 读取的字符然后作为String
返回。 请注意,由于此方法处理字节,它不支持输入完整的Unicode字符集。如果在甚至可以读取一个字节之前遇到文件结尾,则返回
null
。 否则,读取的每个字节将通过零扩展转换为类型char
。 如果遇到字符'\n'
,则会被丢弃,读取停止。 如果遇到字符'\r'
,则会被丢弃,如果以下字节转换为字符'\n'
,则也将被丢弃; 阅读然后停止。 如果在遇到任何一个字符'\n'
和'\r'
之前遇到文件结尾,则读取停止。 一旦读取停止,将返回一个String
,其中包含所有读取的字符,而不是按照顺序排列。 请注意,此字符串中的每个字符的值都小于\u0100
,即(char)256
。- 结果
-
来自输入流的下一行文本,或
null
如果在一个字节可以读取之前遇到文件的结尾。 - 异常
-
IOException
- 如果发生I / O错误。
-
readUTF
String readUTF() throws IOException
读取已使用modified UTF-8格式编码的字符串。readUTF
的一般合同是它读取以修改的UTF-8格式编码的Unicode字符串的表示; 这个字符串然后作为一个String
返回。首先,读取并使用两个字节,以完全符合
readUnsignedShort
方法的方式构造无符号16位整数。 该整数值称为UTF长度,并指定要读取的其他字节数。 然后将这些字节通过组合考虑来转换为字符。 每组的长度根据组的第一个字节的值计算。 组之后的字节(如果有的话)是下一组的第一个字节。如果组的第一个字节与位模式
0xxxxxxx
(其中x
表示“可能是0
或1
”)1
,则该组仅由该字节组成。 该字节是零扩展形成一个字符。如果一组的第一个字节与位模式
110xxxxx
匹配,则该组由该字节a
和第二字节b
。 如果没有字节b
(因为字节a
是要读取的最后一个字节),或者如果字节b
与位模式10xxxxxx
不匹配,则抛出UTFDataFormatException
。 否则,该组将转换为字符:(char)(((a & 0x1F) << 6) | (b & 0x3F))
1110xxxx
匹配,则该组由该字节a
和两个多个字节b
和c
。 如果没有字节c
(因为字节a
是要读取的最后两个字节之一),或者字节b
或字节c
与位模式10xxxxxx
不匹配,则抛出UTFDataFormatException
。 否则,该组将转换为字符:(char)(((a & 0x0F) << 12) | ((b & 0x3F) << 6) | (c & 0x3F))
1111xxxx
或模式10xxxxxx
,则抛出UTFDataFormatException
。如果在整个过程中随时遇到文件结尾,则抛出一个
EOFException
。通过此过程将每个组转换为一个字符后,以与从输入流中读取相应组相同的顺序收集字符,形成一个返回的
String
。接口
DataOutput
的writeUTF
方法可以用于通过该方法写入适合于读取的数据。- 结果
- 一个Unicode字符串。
- 异常
-
EOFException
- 如果此流在读取所有字节之前到达结束。 -
IOException
- 如果发生I / O错误。 -
UTFDataFormatException
- if the bytes do not represent a valid modified UTF-8 encoding of a string.
-
-