public interface DataInput
DataInput
接口提供从二进制流读取字节并从其中重建任何Java原语类型的数据。
还有,为了重建设施String
从数据modified UTF-8格式。
在这个接口中的所有读取例程通常都是如果在读取所需的字节数之前到达文件结尾,则抛出一个EOFException
(一种是IOException
)。 如果除文件结尾之外的任何其他原因无法读取任何字节,则抛出IOException
以外的EOFException
。 特别地,如果输入流已经被关闭,则可以抛出IOException
。
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字节编码,因此编码字符串从不具有嵌入的空值。 DataInputStream
, DataOutput
Modifier and Type | Method and Description |
---|---|
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 字节的数据,丢弃跳过的字节。
|
void readFully(byte[] b) throws IOException
b
。
读取的字节数等于b
的长度。
该方法阻塞,直到出现以下情况之一:
b.length
字节的输入数据可用,在这种情况下将进行正常的返回。 EOFException
。 IOException
以外的EOFException
。 如果b
是null
,则会抛出一个NullPointerException
。 如果b.length
为零,则不读取任何字节。 否则,读取的第一个字节存储到元素b[0]
,下一个写入b[1]
,依此类推。 如果从该方法抛出异常,那么可能是b
中的一些但不是所有的字节已经被使用来自输入流的数据更新。
b
- 读取数据的缓冲区。
EOFException
- 如果此流在读取所有字节之前到达结束。
IOException
- 如果发生I / O错误。
void readFully(byte[] b, int off, int len) throws IOException
len
个字节。
该方法阻塞,直到出现以下情况之一:
len
字节的输入数据可用,在这种情况下会进行正常的返回。 EOFException
。 IOException
以外的EOFException
。 如果b
是null
,则会抛出一个NullPointerException
。 如果off
为负数,或len
为负数,或off+len
大于数组长度b
,则抛出IndexOutOfBoundsException
。 如果len
为零,则不会读取字节。 否则,读取的第一个字节存储到元素b[off]
,下一个写入b[off+1]
,依此类推。 读取的字节数最多等于len
。
b
- 读取数据的缓冲区。
off
- 指定数据偏移量的int。
len
- 一个int指定要读取的字节数。
EOFException
- 如果此流在读取所有字节之前到达结束。
IOException
- 如果发生I / O错误。
int skipBytes(int n) throws IOException
n
个字节的数据,丢弃跳过的字节。
但是,它可能跳过一些较小数量的字节,可能会为零。
这可能是由许多条件中的任何一个引起的
n
字节之前已经跳过的文件到达结束只是一种可能。
这个方法永远不会抛出一个EOFException
。
返回实际跳过的字节数。
n
- 要跳过的字节数。
IOException
- 如果发生I / O错误。
boolean readBoolean() throws IOException
true
如果该字节不为零, false
如果该字节是零。
此方法适用于读取由写入的字节writeBoolean
接口的方法DataOutput
。
boolean
值读。
EOFException
- 如果此流在读取所有字节之前到达结束。
IOException
- 如果发生I / O错误。
byte readByte() throws IOException
-128
至127
范围内的有符号值。
此方法适用于读取由写入的字节writeByte
接口的方法DataOutput
。
EOFException
- 如果此流在读取所有字节之前到达结束。
IOException
- 如果发生I / O错误。
int readUnsignedByte() throws IOException
int
,并返回结果,因此在0
到255
。
此方法适用于读取由写入的字节writeByte
接口的方法DataOutput
如果参数到writeByte
意欲是在范围内的值0
通过255
。
EOFException
- 如果此流在读取所有字节之前到达结束。
IOException
- 如果发生I / O错误。
short readShort() throws IOException
short
值。
让a
成为第一个字节, b
是第二个字节。
返回的值为:
(short)((a << 8) | (b & 0xff))
此方法适用于读取由写入字节writeShort
接口的方法DataOutput
。
EOFException
- 如果此流在读取所有字节之前到达结束。
IOException
- 如果发生I / O错误。
int readUnsignedShort() throws IOException
0
到65535
的int
值。
让a
成为第一个字节, b
是第二个字节。
返回的值为:
(((a & 0xff) << 8) | (b & 0xff))
此方法适用于读取由写入字节writeShort
接口的方法DataOutput
如果参数到writeShort
意欲是在范围内的值0
通过65535
。
EOFException
- 如果此流在读取所有字节之前到达结束。
IOException
- 如果发生I / O错误。
char readChar() throws IOException
char
值。
让a
成为第一个字节, b
是第二个字节。
返回的值为:
(char)((a << 8) | (b & 0xff))
此方法适用于读取由写入的字节writeChar
接口的方法DataOutput
。
char
值读。
EOFException
- 如果此流在读取所有字节之前到达结束。
IOException
- 如果发生I / O错误。
int readInt() throws IOException
int
值。
让a-d
是第一到第四个字节读取。
返回的值为:
(((a & 0xff) << 24) | ((b & 0xff) << 16) | ((c & 0xff) << 8) | (d & 0xff))
此方法适用于读取由写入的字节writeInt
接口的方法DataOutput
。
int
值读。
EOFException
- 如果此流在读取所有字节之前到达结束。
IOException
- 如果发生I / O错误。
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错误。
float readFloat() throws IOException
float
值。
它由第一构造一个执行此int
在完全相同的方式值readInt
方法,那么这个变换int
值到一个float
在该方法的完全相同的方式Float.intBitsToFloat
。
此方法适用于读取由写入的字节writeFloat
接口的方法DataOutput
。
float
值读取。
EOFException
- 如果此流在读取所有字节之前到达结束。
IOException
- 如果发生I / O错误。
double readDouble() throws IOException
double
值。
它是通过首先按照readLong
方法构建一个long
值,然后将该long
值转换为double
的方法,方法Double.longBitsToDouble
。
此方法适用于读取由写入的字节writeDouble
接口的方法DataOutput
。
double
值读。
EOFException
- 如果此流在读取所有字节之前到达结束。
IOException
- 如果发生I / O错误。
String readLine() throws IOException
String
返回。
请注意,由于此方法处理字节,它不支持输入完整的Unicode字符集。
如果在甚至可以读取一个字节之前遇到文件结尾,则返回null
。 否则,每个所读取字节被转换为类型char
由零扩展。 如果遇到'\n'
'\n',则会被丢弃,读取停止。 如果遇到'\r'
'\r',则会被丢弃,如果以下字节转换为字符'\n'
,则也将被丢弃; 阅读然后停止。 如果在遇到任何一个字符'\n'
和'\r'
之前遇到文件结尾,则读取停止。 一旦读取停止,将返回一个String
,其中包含读取并且不被丢弃的所有字符。 请注意,此字符串中的每个字符都将具有小于\u0100
的值,即(char)256
。
null
如果在一个字节之前遇到文件的结尾可以被读取。
IOException
- 如果发生I / O错误。
String readUTF() throws IOException
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
,形成返回的String
。
可以使用接口DataOutput
的writeUTF
方法来写入适合于通过该方法读取的数据。
EOFException
- 如果此流在读取所有字节之前到达结束。
IOException
- 如果发生I / O错误。
UTFDataFormatException
- 如果字节不表示字符串的有效修改的UTF-8编码。