模块 java.desktop

接口 ImageInputStream

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

public interface ImageInputStream extends DataInput , Closeable
ImageReader s 使用的可搜索输入流接口。各种输入源,例如 InputStream s 和 File s,以及未来的快速 I/O 源可能被这个接口的合适实现“包装”以供 Image I/O API 使用。
参见:
  • 方法总结

    修饰符和类型
    方法
    描述
    void
    关闭流。
    void
    丢弃当前流位置之前的流的初始位置。
    void
    flushBefore(long pos)
    丢弃指示位置之前的流的初始部分。
    int
    返回当前位偏移量,作为 0 到 7 之间的整数,包括 0 和 7。
    返回字节顺序,作为 java.nio.ByteOrder 枚举的实例,数据值将以此字节顺序从该流中读取。
    long
    返回可以执行查找的流中最早的位置。
    long
    返回流的当前字节位置。
    boolean
    如果此 ImageInputStream 缓存数据本身以允许向后查找,则返回 true
    boolean
    如果此 ImageInputStream 缓存数据本身以允许向后查找,则返回 true,并且缓存保存在临时文件中。
    boolean
    如果此 ImageInputStream 缓存数据本身以允许向后查找,并且缓存保存在主内存中,则返回 true
    long
    返回流的总长度(如果已知)。
    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
    从流中读取单个位并将其作为 int 返回,其值为 01
    long
    readBits(int numBits)
    从流中读取一个位串并将其作为 long 返回,读取的第一位成为输出的最高有效位。
    boolean
    从流中读取一个字节并返回 booleantrue 如果它是非零,则返回 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 longs(带符号的 64 位整数),并将它们存储到 l 从索引 off 开始。
    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 值。
    读入使用 修改后的 UTF-8 格式编码的字符串。
    void
    在最近一次不匹配的调用 mark 时,将流指针返回到其先前位置,包括位偏移量。
    void
    seek(long pos)
    将当前流位置设置为所需位置。
    void
    setBitOffset(int bitOffset)
    将位偏移量设置为介于 0 和 7 之间的整数,包括 0 和 7。
    void
    setByteOrder(ByteOrder byteOrder)
    为将来从此流中读取数据值设置所需的字节顺序。
    int
    skipBytes(int n)
    将流位置向前移动给定的字节数。
    long
    skipBytes(long n)
    将流位置向前移动给定的字节数。
  • 方法详情

    • setByteOrder

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

      枚举类java.nio.ByteOrder用于指定字节顺序。 ByteOrder.BIG_ENDIAN 的值指定所谓的 big-endian 或网络字节顺序,其中高位字节在前。摩托罗拉和 Sparc 处理器以这种格式存储数据,而英特尔处理器以相反的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 - 要读取的最大 byte 数。
      返回:
      实际读取的字节数,或 -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 - 要读取的最大 byte 数。
      抛出:
      IndexOutOfBoundsException - 如果 len 为负。
      NullPointerException - 如果 bufnull
      IOException - 如果发生 I/O 错误。
    • readBoolean

      boolean readBoolean() throws IOException
      从流中读取一个字节并返回 booleantrue 如果它是非零,则返回 false 如果它是零。

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

      指定者:
      readBoolean 在接口 DataInput
      返回:
      来自流的boolean。
      抛出:
      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
      返回:
      来自流的 unsigned char 值。
      抛出:
      EOFException - 如果流在读取所有字节之前到达末尾。
      IOException - 如果发生 I/O 错误。
      参见:
    • readInt

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

      流中的位偏移量被忽略并被视为零。

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

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

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

      返回:
      来自流的 unsigned int 值,作为 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 返回。

      首先,读取两个字节并将其用于以readUnsignedShort方法的方式构造一个无符号的 16 位整数,使用网络字节顺序(无论当前字节顺序设置如何)。这个整数值称为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 并返回。

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

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

      Note:该方法不应该用于使用标准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 - 要读取的最大 byte 数。
      抛出:
      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 短裤(带符号的 16 位整数),并将它们存储到从索引 off 开始的 s 中。如果到达流的末尾,将抛出 java.io.EOFException

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

      参数:
      s - 要写入的短裤数组。
      off - s 中要写入的起始位置。
      len - 要读取的最大 short 数。
      抛出:
      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 个字符(无符号 16 位整数),并将它们存储到从索引 off 开始的 c 中。如果到达流的末尾,将抛出 java.io.EOFException

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

      参数:
      c - 要写入的字符数组。
      off - c 中要写入的起始位置。
      len - 要读取的最大 char 数。
      抛出:
      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 整数(带符号的 32 位整数),并将它们存储到从索引 off 开始的 i 中。如果到达流的末尾,将抛出 java.io.EOFException

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

      参数:
      i - 要写入的整数数组。
      off - i 中要写入的起始位置。
      len - 要读取的最大 int 数。
      抛出:
      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 位整数),并将它们存储到 l 从索引 off 开始。如果到达流的末尾,将抛出 java.io.EOFException

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

      参数:
      l - 要写入的 longs 数组。
      off - l 中要写入的起始位置。
      len - 要读取的最大 long 数。
      抛出:
      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 浮点数(32 位 IEEE 单精度浮点数),并将它们存储到从索引 off 开始的 f 中。如果到达流的末尾,将抛出 java.io.EOFException

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

      参数:
      f - 要写入的浮点数组。
      off - f 中要写入的起始位置。
      len - 要读取的最大 float 数。
      抛出:
      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 双精度数(64 位 IEEE 双精度浮点数),并将它们存储到从索引 off 开始的 d 中。如果到达流的末尾,将抛出 java.io.EOFException

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

      参数:
      d - 要写入的双精度数组。
      off - d 中要写入的起始位置。
      len - 要读取的最大 double 数。
      抛出:
      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 之间的整数,包括 0 和 7。位偏移量通过调用 readBits 方法隐式更新。值 0 表示最高有效位,值 7 表示正在读取的字节的最低有效位。

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

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

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

      int readBit() throws IOException
      从流中读取单个位并将其作为 int 返回,其值为 01 。位偏移量提前 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; // Shift left one bit to make room
        accum |= readBit();
       }
        
      请注意,如果使用反向网络字节顺序(即 getByteOrder() == false ),readBits(32) 的结果可能因此不等于 readInt() 的结果。

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

      参数:
      numBits - 要读取的位数,作为 0 到 64 之间的 int,包括在内。
      返回:
      位串,作为 long,最后读取的位存储在最低有效位中。
      抛出:
      IllegalArgumentException - 如果 numBits 不在 0 到 64 之间,包括 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 时,将流指针返回到其先前位置,包括位偏移量。

      在没有相应调用 mark 的情况下调用 reset 无效。

      如果先前标记的位置位于流的丢弃部分,将抛出 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()
      如果此 ImageInputStream 缓存数据本身以允许向后查找,则返回 true。应用程序可能会参考它来决定刷新的频率或是否刷新以节省缓存资源。
      返回:
      true 如果这个 ImageInputStream 缓存数据。
      参见:
    • isCachedMemory

      boolean isCachedMemory()
      如果此 ImageInputStream 缓存数据本身以允许向后查找,并且缓存保存在主内存中,则返回 true。应用程序可能会参考它来决定刷新的频率或是否刷新以节省缓存资源。
      返回:
      true 如果这个 ImageInputStream 在主内存中缓存数据。
      参见:
    • isCachedFile

      boolean isCachedFile()
      如果此 ImageInputStream 缓存数据本身以允许向后查找,则返回 true,并且缓存保存在临时文件中。应用程序可能会参考它来决定刷新的频率或是否刷新以节省缓存资源。
      返回:
      true 如果此 ImageInputStream 将数据缓存在临时文件中。
      参见:
    • close

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