Module java.desktop

Interface ImageInputStream

所有超级接口:
AutoCloseable, Closeable, DataInput
所有已知子接口:
ImageOutputStream
所有已知实现类:
FileCacheImageInputStream, FileCacheImageOutputStream, FileImageInputStream, FileImageOutputStream, ImageInputStreamImpl, ImageOutputStreamImpl, MemoryCacheImageInputStream, MemoryCacheImageOutputStream

public interface ImageInputStream extends DataInput, Closeable
ImageReader使用的可寻址输入流接口。各种输入源,如InputStreamFile,以及未来的快速I/O源,可以通过适当的接口实现"包装",以供Image I/O API使用。
参见:
  • Method Summary

    Modifier and Type
    Method
    Description
    void
    close()
    关闭流。
    void
    flush()
    在当前流位置之前丢弃流的初始位置。
    void
    flushBefore(long pos)
    在指定位置之前丢弃流的初始部分。
    int
    返回当前位偏移量,作为介于0和7之间的整数,包括0和7。
    返回将从该流中读取数据值的字节顺序,作为java.nio.ByteOrder枚举的实例。
    long
    返回可以执行寻址的流中最早的位置。
    long
    返回流的当前字节位置。
    boolean
    如果此ImageInputStream自身缓存数据以允许向后寻址,则返回true
    boolean
    如果此ImageInputStream自身缓存数据以允许向后寻址,并且缓存保存在临时文件中,则返回true
    boolean
    如果此ImageInputStream自身缓存数据以允许向后寻址,并且缓存保存在主存中,则返回true
    long
    length()
    返回流的总长度(如果已知)。
    void
    mark()
    标记流中的位置,以便在后续调用reset时返回该位置。
    int
    read()
    从流中读取一个字节并将其作为介于0和255之间的整数返回。
    int
    read(byte[] b)
    从流中读取最多b.length字节,并将它们存储到从索引0开始的b中。
    int
    read(byte[] b, int off, int len)
    从流中读取最多len字节,并将它们存储到从索引off开始的b中。
    int
    从流中读取一个位并将其作为值为01int返回。
    long
    readBits(int numBits)
    从流中读取一个位串,并将其作为long返回,其中读取的第一个位成为输出的最高有效位。
    boolean
    从流中读取一个字节并将其作为boolean值返回,如果不为零则返回true,如果为零则返回false
    byte
    从流中读取一个字节并将其作为byte值返回。
    void
    readBytes(IIOByteBuffer buf, int len)
    从流中读取最多len字节,并修改提供的IIOByteBuffer以指示可以找到数据的字节数组、偏移量和长度。
    char
    readUnsignedShort等效,只是使用char数据类型返回结果。
    double
    从流中读取8个字节,并(概念上)根据当前字节顺序连接它们,并将结果作为double返回。
    float
    从流中读取4个字节,并(概念上)根据当前字节顺序连接它们,并将结果作为float返回。
    void
    readFully(byte[] b)
    从流中读取b.length字节,并将它们存储到从索引0开始的b中。
    void
    readFully(byte[] b, int off, int len)
    从流中读取len字节,并将它们存储到从索引off开始的b中。
    void
    readFully(char[] c, int off, int len)
    根据当前字节顺序从流中读取len个字符(无符号16位整数),并将它们存储到从索引off开始的c中。
    void
    readFully(double[] d, int off, int len)
    根据当前字节顺序从流中读取len个双精度(64位IEEE双精度浮点数),并将它们存储到从索引off开始的d中。
    void
    readFully(float[] f, int off, int len)
    根据当前字节顺序从流中读取len个单精度(32位IEEE单精度浮点数),并将它们存储到从索引off开始的f中。
    void
    readFully(int[] i, int off, int len)
    根据当前字节顺序从流中读取len个有符号32位整数,并将它们存储到从索引off开始的i中。
    void
    readFully(long[] l, int off, int len)
    根据当前字节顺序从流中读取len个有符号64位整数,并将它们存储到从索引off开始的l中。
    void
    readFully(short[] s, int off, int len)
    根据当前字节顺序从流中读取len个有符号16位整数,并将它们存储到从索引off开始的s中。
    int
    从流中读取4个字节,并(概念上)根据当前字节顺序连接它们,并将结果作为int返回。
    从输入流中读取下一行文本。
    long
    从流中读取8个字节,并(概念上)根据当前字节顺序连接它们,并将结果作为long返回。
    short
    从流中读取两个字节,并(概念上)根据当前字节顺序连接它们,并将结果作为short值返回。
    int
    从流中读取一个字节,并(概念上)将其转换为int,使用0xff进行掩码以去除任何符号扩展位,并将其作为byte值返回。
    long
    从流中读取4个字节,并(概念上)根据当前字节顺序连接它们,将结果转换为long,使用0xffffffffL进行掩码以去除任何符号扩展位,并将结果作为无符号long值返回。
    int
    从流中读取两个字节,并(概念上)根据当前字节顺序连接它们,将结果转换为int,使用0xffff进行掩码以去除任何符号扩展位,并将结果作为无符号int值返回。
    读取使用modified UTF-8格式编码的字符串。
    void
    reset()
    将流指针设置回最近未匹配调用mark时的先前位置,包括位偏移量。
    void
    seek(long pos)
    将当前流位置设置为所需位置。
    void
    setBitOffset(int bitOffset)
    将位偏移设置为介于0和7之间的整数。
    void
    setByteOrder(ByteOrder byteOrder)
    为将来从该流中读取数据值设置所需的字节顺序。
    int
    skipBytes(int n)
    将流位置向前移动给定的字节数。
    long
    skipBytes(long n)
    将流位置向前移动给定的字节数。
  • Method Details

    • setByteOrder

      void setByteOrder(ByteOrder byteOrder)
      为将来从该流中读取数据值设置所需的字节顺序。例如,如果将字节序列'0x01 0x02 0x03 0x04'读取为4字节整数,则在网络字节顺序下值为'0x01020304',在反向字节顺序下值为'0x04030201'。

      枚举类java.nio.ByteOrder用于指定字节顺序。值ByteOrder.BIG_ENDIAN指定所谓的大端或网络字节顺序,其中高位字节先出现。Motorola和Sparc处理器以此格式存储数据,而Intel处理器以相反的ByteOrder.LITTLE_ENDIAN顺序存储数据。

      字节顺序不会影响readBits方法返回的结果(或ImageOutputStream.writeBits写入的值)。

      参数:
      byteOrder - ByteOrder.BIG_ENDIANjava.nio.ByteOrder.LITTLE_ENDIAN之一,指示将来读取时使用网络字节顺序还是其反向顺序。
      参见:
    • getByteOrder

      ByteOrder getByteOrder()
      返回将从该流中读取数据值的字节顺序,作为java.nio.ByteOrder枚举的实例。
      返回:
      ByteOrder.BIG_ENDIANByteOrder.LITTLE_ENDIAN之一,指示正在使用的字节顺序。
      参见:
    • read

      int read() throws IOException
      从流中读取一个字节,并将其作为介于0和255之间的整数返回。如果到达流的末尾,则返回-1。

      在读取发生之前,流中的位偏移被重置为零。

      返回值:
      从流中返回的字节值,作为int,或-1表示EOF。
      抛出:
      IOException - 如果发生I/O错误。
    • read

      int read(byte[] b) throws IOException
      从流中读取最多b.length字节,并将它们存储到从索引0开始的b中。返回读取的字节数。如果无法读取任何字节,因为已到达流的末尾,则返回-1。

      在读取发生之前,流中的位偏移被重置为零。

      参数:
      b - 要写入的字节数组。
      返回值:
      实际读取的字节数,或-1表示EOF。
      抛出:
      NullPointerException - 如果bnull
      IOException - 如果发生I/O错误。
    • read

      int read(byte[] b, int off, int len) throws IOException
      从流中读取最多len字节,并将它们存储到从索引off开始的b中。返回读取的字节数。如果无法读取任何字节,因为已到达流的末尾,则返回-1

      在读取发生之前,流中的位偏移被重置为零。

      参数:
      b - 要写入的字节数组。
      off - 要写入的b中的起始位置。
      len - 要读取的最大字节数。
      返回值:
      实际读取的字节数,或-1表示EOF。
      抛出:
      NullPointerException - 如果bnull
      IndexOutOfBoundsException - 如果off为负数,len为负数,或off + len大于b.length
      IOException - 如果发生I/O错误。
    • readBytes

      void readBytes(IIOByteBuffer buf, int len) throws IOException
      从流中读取最多len字节,并修改提供的IIOByteBuffer以指示可以找到数据的字节数组、偏移量和长度。调用者不应尝试修改IIOByteBuffer中找到的数据。

      在读取发生之前,流中的位偏移被重置为零。

      参数:
      buf - 要修改的IIOByteBuffer对象。
      len - 要读取的最大字节数。
      抛出:
      IndexOutOfBoundsException - 如果len为负数。
      NullPointerException - 如果bufnull
      IOException - 如果发生I/O错误。
    • readBoolean

      boolean readBoolean() throws IOException
      从流中读取一个字节,并返回一个boolean值,如果不为零则返回true,如果为零则返回false

      在读取发生之前,流中的位偏移被重置为零。

      指定者:
      readBoolean 在接口 DataInput
      返回值:
      从流中返回的布尔值。
      抛出:
      EOFException - 如果到达流的末尾。
      IOException - 如果发生I/O错误。
    • readByte

      byte readByte() throws IOException
      从流中读取一个字节,并将其作为byte值返回。介于0x000x7f之间的字节值表示介于0127之间的整数值。介于0x800xff之间的值表示从-128/1的负值。

      在读取发生之前,流中的位偏移被重置为零。

      指定者:
      readByte 在接口 DataInput
      返回值:
      从流中返回的有符号字节值。
      抛出:
      EOFException - 如果到达流的末尾。
      IOException - 如果发生I/O错误。
    • readUnsignedByte

      int readUnsignedByte() throws IOException
      从流中读取一个字节,并(概念上)将其转换为int,使用0xff进行掩码以去除任何符号扩展位,并将其作为byte值返回。

      因此,介于0x000x7f之间的字节值将简单地作为介于0127之间的整数值返回。介于0x800xff之间的值,通常表示负的byte值,将映射为介于128255之间的正整数。

      在读取发生之前,流中的位偏移被重置为零。

      指定者:
      readUnsignedByte 在接口 DataInput
      返回值:
      从流中返回的无符号字节值。
      抛出:
      EOFException - 如果到达流的末尾。
      IOException - 如果发生I/O错误。
    • readShort

      short readShort() throws IOException
      从流中读取两个字节,并(概念上)根据当前字节顺序连接它们,并将结果作为short值返回。

      在读取发生之前,流中的位偏移被重置为零。

      指定者:
      readShort 在接口 DataInput
      返回值:
      从流中返回的有符号短整数值。
      抛出:
      EOFException - 如果在读取所有字节之前到达流的末尾。
      IOException - 如果发生I/O错误。
      参见:
    • readUnsignedShort

      int readUnsignedShort() throws IOException
      从流中读取两个字节,并(概念上)根据当前字节顺序连接它们,将结果转换为int,使用0xffff进行掩码以去除任何符号扩展位,并将结果作为无符号int值返回。

      在读取发生之前,流中的位偏移被重置为零。

      指定者:
      readUnsignedShort 在接口 DataInput
      返回值:
      从流中返回的无符号短整数值,作为int。
      抛出:
      EOFException - 如果在读取所有字节之前到达流的末尾。
      IOException - 如果发生I/O错误。
      参见:
    • readChar

      char readChar() throws IOException
      等同于readUnsignedShort,只是使用char数据类型返回结果。

      在读取发生之前,流中的位偏移被重置为零。

      指定者:
      readChar 在接口 DataInput
      返回值:
      从流中返回的无符号char值。
      抛出:
      EOFException - 如果在读取所有字节之前到达流的末尾。
      IOException - 如果发生I/O错误。
      参见:
    • readInt

      int readInt() throws IOException
      从流中读取4个字节,并(概念上)根据当前字节顺序连接它们,并将结果作为int返回。

      忽略流中的位偏移,并将其视为零。

      指定由:
      readInt 在接口 DataInput
      返回:
      流中的一个有符号整数值。
      抛出:
      EOFException - 如果在读取所有字节之前流到达末尾。
      IOException - 如果发生I/O错误。
      参见:
    • readUnsignedInt

      long readUnsignedInt() throws IOException
      从流中读取4个字节,(概念上)根据当前字节顺序连接它们,将结果转换为长整型,使用0xffffffffL进行掩码处理以去除任何符号扩展位,并将结果作为无符号long值返回。

      在读取发生之前,流中的位偏移被重置为零。

      返回:
      作为长整型的流中的无符号整数值。
      抛出:
      EOFException - 如果在读取所有字节之前流到达末尾。
      IOException - 如果发生I/O错误。
      参见:
    • readLong

      long readLong() throws IOException
      从流中读取8个字节,(概念上)根据当前字节顺序连接它们,并将结果作为long返回。

      在读取发生之前,流中的位偏移被重置为零。

      指定由:
      readLong 在接口 DataInput
      返回:
      流中的一个有符号长整型值。
      抛出:
      EOFException - 如果在读取所有字节之前流到达末尾。
      IOException - 如果发生I/O错误。
      参见:
    • readFloat

      float readFloat() throws IOException
      从流中读取4个字节,(概念上)根据当前字节顺序连接它们,并将结果作为float返回。

      在读取发生之前,流中的位偏移被重置为零。

      指定由:
      readFloat 在接口 DataInput
      返回:
      流中的一个浮点数值。
      抛出:
      EOFException - 如果在读取所有字节之前流到达末尾。
      IOException - 如果发生I/O错误。
      参见:
    • readDouble

      double readDouble() throws IOException
      从流中读取8个字节,(概念上)根据当前字节顺序连接它们,并将结果作为double返回。

      在读取发生之前,流中的位偏移被重置为零。

      指定由:
      readDouble 在接口 DataInput
      返回:
      流中的一个双精度数值。
      抛出:
      EOFException - 如果在读取所有字节之前流到达末尾。
      IOException - 如果发生I/O错误。
      参见:
    • readLine

      String readLine() throws IOException
      从输入流中读取下一行文本。它读取连续的字节,将每个字节单独转换为字符,直到遇到行终止符或文件结束;然后将读取的字符作为String返回。请注意,因为此方法处理字节,所以不支持完整的Unicode字符集的输入。

      如果在读取任何字节之前遇到文件结束,则返回null。否则,读取的每个字节都通过零扩展转换为char类型。如果遇到字符'\n',则将其丢弃并停止读取。如果遇到字符'\r',则将其丢弃,并且如果接下来的字节转换为字符'\n',则也将其丢弃;然后停止读取。如果在遇到字符'\n''\r'之一之前遇到文件结束,则停止读取。一旦停止读取,将返回一个包含所有读取但未丢弃的字符的String,按顺序取出。请注意,此字符串中的每个字符的值都小于\u0100,即(char)256

      在读取发生之前,流中的位偏移被重置为零。

      指定由:
      readLine 在接口 DataInput
      返回:
      包含来自流中一行文本的字符串。
      抛出:
      IOException - 如果发生I/O错误。
    • readUTF

      String readUTF() throws IOException
      读取使用修改的UTF-8格式编码的字符串。 readUTF的一般约定是,它读取以修改的UTF-8格式编码的Unicode字符字符串的表示形式;然后将这些字符作为String返回。

      首先,读取两个字节并使用它们构造一个无符号的16位整数,类似于readUnsignedShort方法,使用网络字节顺序(不考虑当前字节顺序设置)。这个整数值称为UTF长度,并指定要读取的附加字节数。然后将这些字节按组转换为字符。每个组的长度从组的第一个字节的值计算。组的下一个字节(如果有)是下一组的第一个字节。

      如果组的第一个字节匹配位模式0xxxxxxx(其中x表示“可能为01”),则该组只包含该字节。将该字节进行零扩展以形成一个字符。

      如果组的第一个字节匹配位模式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

      如果在整个过程中任何时候遇到文件结束,则抛出java.io.EOFException

      在通过此过程将每个组转换为字符后,按照它们对应的组从输入流中读取的顺序,将字符收集起来,形成一个String,然后返回。

      当前字节顺序设置将被忽略。

      在读取发生之前,流中的位偏移被重置为零。

      注意: 不应在使用标准UTF-8的图像格式的实现中使用此方法,因为此处使用的修改UTF-8与标准UTF-8不兼容。

      指定由:
      readUTF 在接口 DataInput
      返回:
      从流中读取的字符串。
      抛出:
      EOFException - 如果在读取所有字节之前流到达末尾。
      UTFDataFormatException - 如果字节不表示字符串的有效修改UTF-8编码。
      IOException - 如果发生I/O错误。
    • readFully

      void readFully(byte[] b, int off, int len) throws IOException
      从流中读取len字节,并将它们存储到从索引off开始的b中。如果到达流的末尾,将抛出java.io.EOFException

      在读取发生之前,流中的位偏移被重置为零。

      指定由:
      readFully 在接口 DataInput
      参数:
      b - 要写入的字节数组。
      off - 写入的起始位置在数组b内。
      len - 要读取的最大字节数。
      抛出:
      IndexOutOfBoundsException - 如果off为负、len为负或off + len大于b.length
      NullPointerException - 如果bnull
      EOFException - 如果在读取所有字节之前流到达末尾。
      IOException - 如果发生I/O错误。
    • readFully

      void readFully(byte[] b) throws IOException
      从流中读取b.length字节,并将它们存储到从索引0开始的b中。如果到达流的末尾,将抛出java.io.EOFException

      在读取发生之前,流中的位偏移被重置为零。

      指定由:
      readFully 在接口 DataInput
      参数:
      b - 一个byte数组。
      抛出:
      NullPointerException - 如果bnull
      EOFException - 如果在读取所有字节之前流到达末尾。
      IOException - 如果发生I/O错误。
    • readFully

      void readFully(short[] s, int off, int len) throws IOException
      从流中根据当前字节顺序读取len个shorts(有符号的16位整数),并将它们存储到从索引off开始的s中。如果到达流的末尾,将抛出java.io.EOFException

      在读取发生之前,流中的位偏移被重置为零。

      参数:
      s - 要写入的shorts数组。
      off - 写入的起始位置在数组s内。
      len - 要读取的最大shorts数。
      抛出:
      IndexOutOfBoundsException - 如果off为负、len为负或off + len大于s.length
      NullPointerException - 如果snull
      EOFException - 如果在读取所有字节之前流到达末尾。
      IOException - 如果发生I/O错误。
    • readFully

      void readFully(char[] c, int off, int len) throws IOException
      从流中根据当前字节顺序读取len个chars(无符号的16位整数),并将它们存储到从索引off开始的c中。如果到达流的末尾,将抛出java.io.EOFException

      在读取发生之前,流中的位偏移被重置为零。

      参数:
      c - 要写入的chars数组。
      off - 写入的起始位置在数组c内。
      len - 要读取的最大chars数。
      抛出:
      IndexOutOfBoundsException - 如果off为负、len为负或off + len大于c.length
      NullPointerException - 如果cnull
      EOFException - 如果在读取所有字节之前流到达末尾。
      IOException - 如果发生I/O错误。
    • readFully

      void readFully(int[] i, int off, int len) throws IOException
      从流中根据当前字节顺序读取len个ints(有符号的32位整数),并将它们存储到从索引off开始的i中。如果到达流的末尾,将抛出java.io.EOFException

      在读取发生之前,流中的位偏移被重置为零。

      参数:
      i - 要写入的ints数组。
      off - 写入的起始位置在数组i内。
      len - 要读取的最大ints数。
      抛出:
      IndexOutOfBoundsException - 如果off为负、len为负或off + len大于i.length
      NullPointerException - 如果inull
      EOFException - 如果在读取所有字节之前流到达末尾。
      IOException - 如果发生I/O错误。
    • readFully

      void readFully(long[] l, int off, int len) throws IOException
      从流中根据当前字节顺序读取len个longs(有符号的64位整数),并将它们存储到从索引off开始的l中。如果到达流的末尾,将抛出java.io.EOFException

      在读取发生之前,流中的位偏移被重置为零。

      参数:
      l - 要写入的longs数组。
      off - 写入的起始位置在数组l内。
      len - 要读取的最大longs数。
      抛出:
      IndexOutOfBoundsException - 如果off为负、len为负或off + len大于l.length
      NullPointerException - 如果lnull
      EOFException - 如果在读取所有字节之前流到达末尾。
      IOException - 如果发生I/O错误。
    • readFully

      void readFully(float[] f, int off, int len) throws IOException
      从流中根据当前字节顺序读取len个floats(32位IEEE单精度浮点数),并将它们存储到从索引off开始的f中。如果到达流的末尾,将抛出java.io.EOFException

      在读取发生之前,流中的位偏移被重置为零。

      参数:
      f - 要写入的floats数组。
      off - 写入的起始位置在数组f内。
      len - 要读取的最大floats数。
      抛出:
      IndexOutOfBoundsException - 如果off为负、len为负或off + len大于f.length
      NullPointerException - 如果fnull
      EOFException - 如果在读取所有字节之前流到达末尾。
      IOException - 如果发生I/O错误。
    • readFully

      void readFully(double[] d, int off, int len) throws IOException
      从流中根据当前字节顺序读取len个doubles(64位IEEE双精度浮点数),并将它们存储到从索引off开始的d中。如果到达流的末尾,将抛出java.io.EOFException

      在读取发生之前,流中的位偏移被重置为零。

      参数:
      d - 要写入的doubles数组。
      off - 写入的起始位置在数组d内。
      len - 要读取的最大doubles数。
      抛出:
      IndexOutOfBoundsException - 如果off为负、len为负或off + len大于d.length
      NullPointerException - 如果dnull
      EOFException - 如果在读取所有字节之前流到达末尾。
      IOException - 如果发生I/O错误。
    • getStreamPosition

      long getStreamPosition() throws IOException
      返回流的当前字节位置。下一次读取将从此偏移开始。
      返回:
      包含流位置的 long 类型。
      抛出:
      IOException - 如果发生 I/O 错误。
    • getBitOffset

      int getBitOffset() throws IOException
      返回当前位偏移,作为介于 0 和 7 之间的整数。位偏移隐式地通过对 readBits 方法的调用进行更新。值为 0 表示正在读取的字节的最高有效位,值为 7 表示最低有效位。

      当流首次打开时,位偏移设置为 0,并且通过调用 seekskipBytes 或任何 readreadFully 方法时重置为 0。

      返回:
      包含介于 0 和 7 之间的位偏移的 int 类型。
      抛出:
      IOException - 如果发生 I/O 错误。
      参见:
    • setBitOffset

      void setBitOffset(int bitOffset) throws IOException
      将位偏移设置为介于 0 和 7 之间的整数。由 getStreamPosition 返回的流内字节偏移保持不变。值为 0 表示正在读取的字节的最高有效位,值为 7 表示最低有效位。
      参数:
      bitOffset - 所需的偏移,作为介于 0 和 7 之间的 int 类型。
      抛出:
      IllegalArgumentException - 如果 bitOffset 不在介于 0 和 7 之间。
      IOException - 如果发生 I/O 错误。
      参见:
    • readBit

      int readBit() throws IOException
      从流中读取单个位,并将其作为值为 01int 类型返回。位偏移递增 1 并对 8 取模。
      返回:
      包含值为 01int 类型。
      抛出:
      EOFException - 如果在读取所有位之前流到达末尾。
      IOException - 如果发生 I/O 错误。
    • readBits

      long readBits(int numBits) throws IOException
      从流中读取位字符串,并将其作为 long 类型返回,其中第一个读取的位成为输出的最高有效位。读取从由 getStreamPosition 指示的字节开始,在由 getBitOffset 指示的位开始。位偏移递增 numBits 并对 8 取模。

      流的字节顺序对此方法没有影响。此方法的返回值构造方式是假设逐位读取位,并将其移位到返回值的右侧,如下伪代码所示:

      
       long accum = 0L;
       for (int i = 0; i < numBits; i++) {
         accum <<= 1; // 向左移动一位以腾出空间
         accum |= readBit();
       }
       
      因此,如果使用反向网络字节顺序(即 getByteOrder() == false),则 readBits(32) 的结果可能与 readInt() 的结果不相等。

      如果在读取所有位之前遇到流的末尾,则会抛出 java.io.EOFException

      参数:
      numBits - 要读取的位数,作为介于 0 和 64 之间的 int 类型。
      返回:
      位字符串,作为一个 long 类型,其中最后读取的位存储在最低有效位中。
      抛出:
      IllegalArgumentException - 如果 numBits 不在介于 0 和 64 之间。
      EOFException - 如果在读取所有位之前流到达末尾。
      IOException - 如果发生 I/O 错误。
    • length

      long length() throws IOException
      返回流的总长度,如果已知的话。否则,返回 -1
      返回:
      包含流长度的 long 类型,如果已知的话,否则返回 -1
      抛出:
      IOException - 如果发生 I/O 错误。
    • skipBytes

      int skipBytes(int n) throws IOException
      将流位置向前移动给定的字节数。可能情况下,此方法只能按请求的较小字节数向前跳过,例如如果到达流的末尾。在所有情况下,将返回实际跳过的字节数。在推进位置之前,位偏移设置为零。
      指定者:
      skipBytes 在接口 DataInput
      参数:
      n - 包含要跳过的字节数的 int 类型。
      返回:
      代表跳过的字节数的 int 类型。
      抛出:
      IOException - 如果发生 I/O 错误。
    • skipBytes

      long skipBytes(long n) throws IOException
      将流位置向前移动给定的字节数。此方法与 skipBytes(int) 相同,只是允许更大的跳过距离。
      参数:
      n - 包含要跳过的字节数的 long 类型。
      返回:
      代表跳过的字节数的 long 类型。
      抛出:
      IOException - 如果发生 I/O 错误。
    • seek

      void seek(long pos) throws IOException
      将当前流位置设置为所需位置。下一次读取将在此位置发生。位偏移设置为 0。

      如果 pos 小于刷新位置(由 getflushedPosition 返回),则将抛出 IndexOutOfBoundsException

      可以寻址文件的末尾;仅当执行读取时才会抛出 java.io.EOFException

      参数:
      pos - 包含所需文件指针位置的 long 类型。
      抛出:
      IndexOutOfBoundsException - 如果 pos 小于刷新位置。
      IOException - 如果发生其他 I/O 错误。
    • mark

      void mark()
      标记流中的位置,以便后续调用 reset 返回到该位置。与标准的 InputStream 不同,所有 ImageInputStream 都支持标记。此外,可以任意嵌套调用 markreset

      ReaderInputStream 接口声明的 mark 方法不同,不使用 readLimit 参数。在调用 mark 后可以读取任意数量的数据。

      readBits 方法使用的位位置由每对 markreset 调用保存和恢复。

      请注意,ImageReader 可能作为读取操作的一部分调用 flushBefore。因此,如果应用程序在将该流传递给 ImageReader 之前调用 mark,则应用程序不应假定在读取操作完成后标记的位置仍然有效。

    • reset

      void reset() throws IOException
      将流指针返回到最近未匹配调用 mark 时的先前位置,包括位偏移。

      没有对应调用 markreset 调用不会产生任何效果。

      如果先前标记的位置位于流的丢弃部分,则将抛出 IOException

      抛出:
      IOException - 如果发生 I/O 错误。
    • flushBefore

      void flushBefore(long pos) throws IOException
      丢弃流中指定位置之前的初始部分。尝试寻址到已刷新部分内的偏移将导致 IndexOutOfBoundsException

      调用 flushBefore 可能允许实现此接口的类释放用于存储流数据的资源,如内存或磁盘空间。

      参数:
      pos - 包含可能被刷新的流前缀的长度的 long 类型。
      抛出:
      IndexOutOfBoundsException - 如果 pos 位于已刷新部分内或超过当前流位置。
      IOException - 如果发生 I/O 错误。
    • flush

      void flush() throws IOException
      丢弃流中当前流位置之前的初始位置。等效于 flushBefore(getStreamPosition())
      抛出:
      IOException - 如果发生 I/O 错误。
    • getFlushedPosition

      long getFlushedPosition()
      返回可执行寻址的流中最早的位置。返回值将是传递给之前所有调用 flushBefore 的值的最大值。
      返回:
      可寻址的最早合法位置,作为一个 long 类型。
    • isCached

      boolean isCached()
      返回true如果这个ImageInputStream自己缓存数据以便允许向后查找。应用程序可以参考这一点来决定多频繁地刷新,或者是否刷新以节省缓存资源。
      返回:
      如果这个ImageInputStream缓存数据,则返回true
      参见:
    • isCachedMemory

      boolean isCachedMemory()
      返回true如果这个ImageInputStream自己缓存数据以便允许向后查找,并且缓存保留在主内存中。应用程序可以参考这一点来决定多频繁地刷新,或者是否刷新以节省缓存资源。
      返回:
      如果这个ImageInputStream在主内存中缓存数据,则返回true
      参见:
    • isCachedFile

      boolean isCachedFile()
      返回true如果这个ImageInputStream自己缓存数据以便允许向后查找,并且缓存保留在临时文件中。应用程序可以参考这一点来决定多频繁地刷新,或者是否刷新以节省缓存资源。
      返回:
      如果这个ImageInputStream在临时文件中缓存数据,则返回true
      参见:
    • close

      void close() throws IOException
      关闭流。尝试访问已关闭的流可能导致IOException或不正确的行为。调用此方法可能允许实现此接口的类释放与流相关的资源,如内存、磁盘空间或文件描述符。
      指定者:
      close 在接口 AutoCloseable
      指定者:
      close 在接口 Closeable
      抛出:
      IOException - 如果发生I/O错误。