-
- All Known Subinterfaces:
-
ImageInputStream,ImageOutputStream,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可能会抛出IOException。Modified UTF-8
DataInput和DataOutput接口的实现表示Unicode字符串,其格式略微修改为UTF-8。 (有关标准UTF-8格式的信息,请参见3.9 Unicode标准的 Unicode编码格式 ,版本4.0 )
- 范围
'\u0001'至'\u007F'中的字符由单个字节表示。 - 空字符
'\u0000'和范围'\u0080'到'\u07FF'中的字符由一对字节表示。 - 范围
'\u0800'至'\uFFFF'中的字符由三个字节表示。
\u0001to\u007F1 0 bits 6-0\u0000,
\u0080to\u07FF1 1 1 0 bits 10-6 2 1 0 bits 5-0\u0800to\uFFFF1 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
-
-
方法摘要
所有方法 实例方法 抽象方法 变量和类型 方法 描述 booleanreadBoolean()读取一个输入字节,并返回true如果该字节不为零,false如果该字节是零。bytereadByte()读取并返回一个输入字节。charreadChar()读取两个输入字节并返回char值。doublereadDouble()读取8个输入字节并返回double值。floatreadFloat()读取四个输入字节并返回float值。voidreadFully(byte[] b)从输入流中读取一些字节并将它们存储到缓冲区阵列b。voidreadFully(byte[] b, int off, int len)从输入流中读取len个字节。intreadInt()读取四个输入字节并返回int值。StringreadLine()从输入流中读取下一行文本。longreadLong()读取8个输入字节并返回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字节之前到达文件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.
-
-