-
- All Known Subinterfaces:
-
ImageInputStream
,ImageOutputStream
,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
可能会抛出IOException
。Modified UTF-8
DataInput和DataOutput接口的实现表示Unicode字符串,其格式略微修改为UTF-8。 (有关标准UTF-8格式的信息,请参见3.9 Unicode标准的 Unicode编码格式 ,版本4.0 )
- 范围
'\u0001'
至'\u007F'
中的字符由单个字节表示。 - 空字符
'\u0000'
和范围'\u0080'
到'\u07FF'
中的字符由一对字节表示。 - 范围
'\u0800'
至'\uFFFF'
中的字符由三个字节表示。
\u0001
to\u007F
1 0 bits 6-0\u0000
,
\u0080
to\u07FF
1 1 1 0 bits 10-6 2 1 0 bits 5-0\u0800
to\uFFFF
1 1 1 1 0 bits 15-12 2 1 0 bits 11-6 3 1 0 bits 5-0此格式与标准UTF-8格式之间的差异如下:
- 空字节
'\u0000'
以2字节格式而不是1字节编码,因此编码的字符串永远不会嵌入空值。 - 仅使用1字节,2字节和3字节格式。
- Supplementary characters以代理对的形式表示。
- 从以下版本开始:
- 1.0
- 另请参见:
-
DataInputStream
,DataOutput
-
-
方法摘要
所有方法 实例方法 抽象方法 变量和类型 方法 描述 boolean
readBoolean()
读取一个输入字节,并返回true
如果该字节不为零,false
如果该字节是零。byte
readByte()
读取并返回一个输入字节。char
readChar()
读取两个输入字节并返回char
值。double
readDouble()
读取8个输入字节并返回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()
读取8个输入字节并返回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
字节之前到达文件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
(含)范围内的有符号值。 该方法适用于读取接口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))
DataOutput
的writeChar
方法写入的字节。- 结果
-
读取的值为
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
读取8个输入字节并返回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)))
该方法适用于读取由接口
DataOutput
的writeLong
方法写入的字节。- 结果
-
读取的值为
long
。 - 异常
-
EOFException
- 如果此流在读取所有字节之前到达结尾。 -
IOException
- 如果发生I / O错误。
-
readFloat
float readFloat() throws IOException
读取四个输入字节并返回float
值。 它通过首先以readInt
方法的方式构造int
值,然后以与方法Float.intBitsToFloat
完全相同的方式将此int
值转换为float
来实现此Float.intBitsToFloat
。 该方法适用于读取由接口DataOutput
的writeFloat
方法写入的字节。- 结果
-
读取的值为
float
。 - 异常
-
EOFException
- 如果此流在读取所有字节之前到达结尾。 -
IOException
- 如果发生I / O错误。
-
readDouble
double readDouble() throws IOException
读取8个输入字节并返回double
值。 它通过首先以readLong
方法的方式构造long
值,然后以与方法Double.longBitsToDouble
完全相同的方式将此long
值转换为double
来实现此Double.longBitsToDouble
。 该方法适用于读取由接口DataOutput
的writeDouble
方法写入的字节。- 结果
-
读取的值为
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
返回。首先,读取两个字节并用于构造无符号的16位整数,其方式与
readUnsignedShort
方法完全相同。 此整数值称为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.
-
-