-
- All Known Subinterfaces:
-
ImageInputStream,ImageOutputStream,JNLPRandomAccessFile,ObjectInput
- 所有已知实现类:
-
DataInputStream,FileCacheImageInputStream,FileCacheImageOutputStream,FileImageInputStream,FileImageOutputStream,ImageInputStreamImpl,ImageOutputStreamImpl,MemoryCacheImageInputStream,MemoryCacheImageOutputStream,ObjectInputStream,RandomAccessFile
public interface DataInputDataInput接口提供从二进制流读取字节并从其中重建任何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 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字节,因此编码字符串从不具有嵌入的空值。 - 仅使用1字节,2字节和3字节格式。
- Supplementary characters以代理对的形式表示。
- 从以下版本开始:
- 1.0
- 另请参见:
-
DataInputStream,DataOutput
-
-
方法摘要
所有方法 接口方法 抽象方法 Modifier and Type 方法 描述 booleanreadBoolean()读取一个输入字节,并返回true如果该字节不为零,false如果该字节是零。bytereadByte()读取并返回一个输入字节。charreadChar()读取两个输入字节并返回一个char值。doublereadDouble()读取八个输入字节并返回一个double值。floatreadFloat()读取四个输入字节并返回一个float值。voidreadFully(byte[] b)从输入流读取一些字节,并将它们存储到缓冲器阵列b。voidreadFully(byte[] b, int off, int len)从输入流读取len个字节。intreadInt()读取四个输入字节并返回一个int值。StringreadLine()从输入流读取下一行文本。longreadLong()读取八个输入字节并返回一个long值。shortreadShort()读取两个输入字节并返回一个short值。intreadUnsignedByte()读取一个输入字节,将其扩展为类型int,并返回结果,因此在0至255。intreadUnsignedShort()读取两个输入字节,并返回0至65535范围内的int值。StringreadUTF()读取已使用 modified UTF-8格式编码的字符串。intskipBytes(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.
-
-