所有类


java.io
接口 DataInput

所有已知子接口:
ImageInputStream, ImageOutputStream, ObjectInput
所有已知实现类:
DataInputStream, FileCacheImageInputStream, FileCacheImageOutputStream, FileImageInputStream, FileImageOutputStream, ImageInputStreamImpl, ImageOutputStreamImpl, MemoryCacheImageInputStream, MemoryCacheImageOutputStream, ObjectInputStream, RandomAccessFile

public interface DataInput

DataInput 接口用于从二进制流中读取字节,并重构所有 Java 基本类型数据。同时还提供根据 UTF-8 修改版格式的数据重构 String 的工具。

对于此接口中的所有数据读取例程来说,如果在读取到所需字节数的数据之前已经到达文件末尾 (end of file),则都将抛出 EOFExceptionIOException 的一种)。如果因为文件末尾以外的其他原因无法读取字节,则抛出 IOException 而不是 EOFException。尤其在输入流已关闭的情况下,将抛出 IOException

UTF-8 修改版

DataInput 和 DataOutput 接口的实现表示稍微改版的 UTF-8 格式的 Unicode 字符串。(关于标准 UTF-8 格式的信息,请参阅 The Unicode Standard, Version 4.03.9 Unicode Encoding Forms 小节)。注意,在下表中,最高有效位显示在最左边的列中。

'\u0001''\u007F' 范围内的所有字符由单个字节表示:

位值
字节 1
0
位 6-0

null 字符 '\u0000''\u0080''\u07FF' 范围内的字符由一对字节表示:

位值
字节 1
1
1
0
位 10-6
字节 2
1
0
位 5-0

'\u0800''\uFFFF' 范围内的 char 值由三个字节表示:
位值
字节 1
1
1
1
0
位 15-12
字节 2
1
0
位 11-6
字节 3
1
0
位 5-0

这种格式与标准 UTF-8 格式之间的不同如下:

  • null 字节 '\u0000' 是用 2-byte 格式而不是 1-byte 格式编码的,因此已编码的字符串中决不会有嵌入的 null。
  • 仅使用 1-byte、2-byte 和 3-byte 格式。
  • 增补字符是以代理项对的形式表示的。

从以下版本开始:
JDK1.0
另请参见:
DataInputStream, DataOutput

方法摘要
 booleanreadBoolean()
          读取一个输入字节,如果该字节不是零,则返回 true,如果是零,则返回 false
 bytereadByte()
          读取并返回一个输入字节。
 charreadChar()
          读取一个输入的 char 并返回该 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()
          读取一个输入字节,将它左侧补零 (zero-extend) 转变为 int 类型,并返回结果,所以结果的范围是 0255
 intreadUnsignedShort()
          读取两个输入字节,并返回 065535 范围内的一个 int 值。
 StringreadUTF()
          读入一个已使用 UTF-8 修改版格式编码的字符串。
 intskipBytes(int n)
          试图在输入流中跳过数据的 n 个字节,并丢弃跳过的字节。
 

方法详细信息

readFully

void readFully(byte[] b)
               throws IOException
从输入流中读取一些字节,并将它们存储到缓冲区数组 b 中。读取的字节数等于 b 的长度。

在出现以下条件之一前,此方法将阻塞:

  • 输入数据的 b.length 个字节是可用的,在这种情况下,正常返回。
  • 检测到文件末尾,在这种情况下,抛出 EOFException
  • 发生 I/O 错误,在这种情况下,将抛出 IOException,而不是 EOFException

如果 bnull,则抛出 NullPointerException。如果 b.length 为零,则不读取字节。否则,将读取的第一个字节存储到元素 b[0] 中,下一个字节存储到 b[1] 中,依此类推。如果此方法抛出异常,则可能是因为已经用输入流中的数据更新了 b 的某些(但非全部)字节。

参数:
b - 存储读取数据的缓冲区。
抛出:
EOFException - 如果此流在读取所有字节之前到达末尾。
IOException - 如果发生 I/O 错误。

readFully

void readFully(byte[] b,
               int off,
               int len)
               throws IOException
从输入流中读取 len 个字节。

在出现以下条件之一以前,此方法将阻塞:

  • 输入数据的 len 个字节是可用的,在这种情况下,正常返回。
  • 检测到文件末尾,在这种情况下,抛出 EOFException
  • 如果发生 I/O 错误,在这种情况下,将抛出 IOException,而不是 EOFException

如果 bnull,则抛出 NullPointerException。如果 off 为负,或 len 为负,抑或 off+len 大于数组 b 的长度,则抛出 IndexOutOfBoundsException。如果 len 为零,则不读取字节。否则,将读取的第一个字节存储到元素 b[off] 中,下一个字节存储到 b[off+1] 中,依此类推。读取的字节数至多等于 b[0]

参数:
b - 存储读取数据的缓冲区。
off - 指定数据中的偏移量的 int。
len - 指定读取的字节数的 int。
抛出:
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。此方法适用于读取用接口 DataOutputwriteBoolean 方法写入的字节。

返回:
读取的 boolean 值。
抛出:
EOFException - 如果此流在读取所有字节之前到达末尾。
IOException - 如果发生 I/O 错误。

readByte

byte readByte()
              throws IOException
读取并返回一个输入字节。该字节被看作是 -128127(包含)范围内的一个有符号值。此方法适用于读取用接口 DataOutputwriteByte 方法写入的字节。

返回:
读取的 8 位值。
抛出:
EOFException - 如果此流在读取所有字节之前到达末尾。
IOException - 如果发生 I/O 错误。

readUnsignedByte

int readUnsignedByte()
                     throws IOException
读取一个输入字节,将它左侧补零 (zero-extend) 转变为 int 类型,并返回结果,所以结果的范围是 0255。如果接口 DataOutputwriteByte 方法的参数是 0255 之间的值,则此方法适用于读取用 writeByte 写入的字节。

返回:
读取的无符号 8 位值。
抛出:
EOFException - 如果此流在读取所有字节之前到达末尾。
IOException - 如果发生 I/O 错误。

readShort

short readShort()
                throws IOException
读取两个输入字节并返回一个 short 值。设 a 为第一个读取字节,b 为第二个读取字节。返回的值是:

(short)((a << 8) | (b & 0xff))
 
此方法适用于读取用接口 DataOutputwriteShort 方法写入的字节。

返回:
读取的 16 位值。
抛出:
EOFException - 如果此流在读取所有字节之前到达末尾。
IOException - 如果发生 I/O 错误。