模块  java.base
软件包  java.io

Interface DataInput

  • All Known Subinterfaces:
    ImageInputStreamImageOutputStreamObjectInput
    所有已知实现类:
    DataInputStreamFileCacheImageInputStreamFileCacheImageOutputStreamFileImageInputStreamFileImageOutputStreamImageInputStreamImplImageOutputStreamImplMemoryCacheImageInputStreamMemoryCacheImageOutputStreamObjectInputStreamRandomAccessFile

    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'中的字符由三个字节表示。
    Encoding of UTF-8 values Value Byte Bit Values 7 6 5 4 3 2 1 0 \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
    另请参见:
    DataInputStreamDataOutput
    • 方法摘要

      所有方法  实例方法 抽象方法 
      变量和类型 方法 描述
      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 ,并返回结果,因此在 0255范围内。
      int readUnsignedShort()
      读取两个输入字节并返回 065535范围内的 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

        如果bnull ,则抛出NullPointerException 如果b.length为零,则不读取任何字节。 否则,读取的第一个字节存储在元素b[0] ,下一个字节存入b[1] ,依此类推。 如果从此方法抛出异常,则可能是b某些但不是所有字节都已使用输入流中的数据进行更新。

        参数
        b - 读取数据的缓冲区。
        异常
        NullPointerException - 如果 bnull
        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] ,依此类推。 读取的字节数最多等于len

        参数
        b - 读取数据的缓冲区。
        off - 指定数据数组 b的偏移量的int。
        len - 指定要读取的字节数的int。
        异常
        NullPointerException - 如果 bnull
        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如果该字节是零。 该方法适用于读取接口DataOutputwriteBoolean方法写入的字节。
        结果
        读取的值为 boolean
        异常
        EOFException - 如果此流在读取所有字节之前到达结尾。
        IOException - 如果发生I / O错误。
      • readByte

        byte readByte()       throws IOException
        读取并返回一个输入字节。 该字节被视为-128127 (含)范围内的有符号值。 该方法适用于读取接口DataOutputwriteByte方法写入的字节。
        结果
        读取的8位值。
        异常
        EOFException - 如果此流在读取所有字节之前到达结尾。
        IOException - 如果发生I / O错误。
      • readUnsignedByte

        int readUnsignedByte()              throws IOException
        读取一个输入字节,将其零扩展到类型int ,并返回结果,因此在0255范围内。 此方法适用于读取由写入的字节writeByte接口的方法DataOutput如果参数到writeByte的用意是在范围内的值0通过255
        结果
        无符号8位值读取。
        异常
        EOFException - 如果此流在读取所有字节之前到达结尾。
        IOException - 如果发生I / O错误。
      • readShort

        short readShort()         throws IOException
        读取两个输入字节并返回short值。 a为读取的第一个字节, b为第二个字节。 返回的值是:
          (short)((a << 8) | (b & 0xff))  
        该方法适用于读取接口DataOutputwriteShort方法写入的字节。
        结果
        读取的16位值。
        异常
        EOFException - 如果此流在读取所有字节之前到达结尾。
        IOException - 如果发生I / O错误。
      • readUnsignedShort

        int readUnsignedShort()               throws IOException
        读取两个输入字节并返回065535范围内的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))  
        该方法适用于读取由接口DataOutputwriteChar方法写入的字节。
        结果
        读取的值为 char
        异常
        EOFException - 如果此流在读取所有字节之前到达结尾。
        IOException - 如果发生I / O错误。
      • readInt

        int readInt()     throws IOException
        读取四个输入字节并返回int值。 a-d为读取的第一到第四个字节。 返回的值是:
           (((a & 0xff) << 24) | ((b & 0xff) << 16) | ((c & 0xff) << 8) | (d & 0xff))  
        该方法适用于读取由接口DataOutputwriteInt方法写入的字节。
        结果
        读取的值为 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)))  

        该方法适用于读取由接口DataOutputwriteLong方法写入的字节。

        结果
        读取的值为 long
        异常
        EOFException - 如果此流在读取所有字节之前到达结尾。
        IOException - 如果发生I / O错误。
      • readFloat

        float readFloat()         throws IOException
        读取四个输入字节并返回float值。 它通过首先以readInt方法的方式构造int值,然后以与方法Float.intBitsToFloat完全相同的方式将此int值转换为float来实现此Float.intBitsToFloat 该方法适用于读取由接口DataOutputwriteFloat方法写入的字节。
        结果
        读取的值为 float
        异常
        EOFException - 如果此流在读取所有字节之前到达结尾。
        IOException - 如果发生I / O错误。
      • readDouble

        double readDouble()           throws IOException
        读取8个输入字节并返回double值。 它通过首先以readLong方法的方式构造long值,然后以与方法Double.longBitsToDouble完全相同的方式将此long值转换为double来实现此Double.longBitsToDouble 该方法适用于读取由接口DataOutputwriteDouble方法写入的字节。
        结果
        读取的值为 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表示“可能是01 ”) 1 ,则该组仅包含该字节。 该字节被零扩展以形成一个字符。

        如果组的第一个字节与位模式110xxxxx匹配,则该组由该字节a和第二个字节b 如果没有字节b (因为字节a是要读取的最后一个字节),或者如果字节b与位模式10xxxxxx不匹配,则抛出UTFDataFormatException 否则,该组将转换为字符:

          (char)(((a & 0x1F) << 6) | (b & 0x3F))  
        如果组的第一个字节与位模式1110xxxx匹配,则该组由该字节a和另外两个字节bc 如果没有字节c (因为字节a是要读取的最后两个字节之一),或者字节b或字节c与位模式10xxxxxx不匹配,则抛出UTFDataFormatException 否则,该组将转换为字符:
           (char)(((a & 0x0F) << 12) | ((b & 0x3F) << 6) | (c & 0x3F))  
        如果组的第一个字节与模式1111xxxx或模式10xxxxxx ,则抛出UTFDataFormatException

        如果在整个过程中的任何时间遇到文件结尾,则抛出EOFException

        通过此过程将每个组转换为字符后,将按照从输入流中读取相应组的顺序收集字符,以形成返回的String

        接口DataOutputwriteUTF方法可用于写入适合于通过该方法读取的数据。

        结果
        Unicode字符串。
        异常
        EOFException - 如果此流在读取所有字节之前到达结尾。
        IOException - 如果发生I / O错误。
        UTFDataFormatException - if the bytes do not represent a valid modified UTF-8 encoding of a string.