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 charvalues 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编码。
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.