Module  java.base
软件包  java.io

Interface DataInput

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


    public interface DataInput
    DataInput接口提供从二进制流读取字节并从其中重建任何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节)。 请注意,在下表中,最高位显示在最左侧的列中。

    Bit values and bytes
    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
    char values 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
    另请参见:
    DataInputStreamDataOutput
    • 方法摘要

      所有方法  接口方法  抽象方法 
      Modifier and Type 方法 描述
      boolean readBoolean​()
      读取一个输入字节,并返回 true如果该字节不为零, false如果该字节是零。
      byte readByte​()
      读取并返回一个输入字节。
      char readChar​()
      读取两个输入字节并返回一个 char值。
      double readDouble​()
      读取八个输入字节并返回一个 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​()
      读取八个输入字节并返回一个 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字节之前已经跳过的文件到达结束只有一种可能性。 这种方法永远不会抛出一个EOFException 返回实际跳过的字节数。
        参数
        n - 要跳过的字节数。
        结果
        实际跳过的字节数。
        异常
        IOException - 如果发生I / O错误。
      • readBoolean

        boolean readBoolean​()
                     throws IOException
        读取一个输入字节,并返回true如果该字节不为零, false如果该字节是零。 该方法适用于读取接口DataOutputwriteBoolean方法写入的字节。
        结果
        boolean值读。
        异常
        EOFException - 如果此流在读取所有字节之前到达结束。
        IOException - 如果发生I / O错误。
      • readByte

        byte readByte​()
               throws IOException
        读取并返回一个输入字节。 该字节被视为-128127范围内的-128符号值。 该方法适用于读取由接口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
        读取两个输入字节,并返回065535int值。 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))  
        该方法适用于读取由接口DataOutputwriteInt方法写入的字节。
        结果
        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表示“可能是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.