Module java.desktop

Interface ImageOutputStream

所有超级接口:
AutoCloseable, Closeable, DataInput, DataOutput, ImageInputStream
所有已知实现类:
FileCacheImageOutputStream, FileImageOutputStream, ImageOutputStreamImpl, MemoryCacheImageOutputStream

public interface ImageOutputStream extends ImageInputStream, DataOutput
ImageWriter使用的可寻址输出流接口。各种输出目标,如OutputStreamFile,以及未来的快速I/O目标,都可以通过适当实现此接口来“包装”,以供Image I/O API使用。

与标准的OutputStream不同,ImageOutputStream扩展了其对应的ImageInputStream。因此,在写入时可以从流中读取。相同的寻址和刷新位置适用于读取和写入,尽管在字节对齐写入之前的非零位偏移的语义必然与字节对齐读取之前的非零位偏移的语义不同。在读取字节时,任何位偏移都将设置为0,然后进行读取;在写入字节时,非零位偏移会导致字节中剩余的位被写入为0。然后,字节对齐写入将从下一个字节位置开始。

参见:
  • Method Details

    • write

      void write(int b) throws IOException
      在当前位置向流中写入一个字节。忽略b的24个高位。

      如果流中的位偏移不为零,则当前字节的其余部分将首先填充为0并写出。写入后,位偏移将为0。实现者可以使用flushBits方法来保证这一点。

      指定者:
      write 在接口 DataOutput
      参数:
      b - 要写入其低8位的int
      抛出:
      IOException - 如果发生I/O错误。
    • write

      void write(byte[] b) throws IOException
      在当前位置向流中写入一系列字节。如果b.length为0,则不会写入任何内容。首先写入字节b[0],然后是字节b[1],依此类推。

      如果流中的位偏移不为零,则当前字节的其余部分将首先填充为0并写出。写入后,位偏移将为0。

      指定者:
      write 在接口 DataOutput
      参数:
      b - 要写入的byte数组。
      抛出:
      NullPointerException - 如果bnull
      IOException - 如果发生I/O错误。
    • write

      void write(byte[] b, int off, int len) throws IOException
      在当前位置向流中写入一系列字节。如果len为0,则不会写入任何内容。首先写入字节b[off],然后是字节b[off + 1],依此类推。

      如果流中的位偏移不为零,则当前字节的其余部分将首先填充为0并写出。写入后,位偏移将为0。实现者可以使用flushBits方法来保证这一点。

      指定者:
      write 在接口 DataOutput
      参数:
      b - 要写入的byte数组。
      off - 数据中的起始偏移量。
      len - 要写入的byte数。
      抛出:
      IndexOutOfBoundsException - 如果off为负数,len为负数,或off + len大于b.length
      NullPointerException - 如果bnull
      IOException - 如果发生I/O错误。
    • writeBoolean

      void writeBoolean(boolean v) throws IOException
      向流中写入一个boolean值。如果v为true,则写入值(byte)1;如果v为false,则写入值(byte)0

      如果流中的位偏移不为零,则当前字节的其余部分将首先填充为0并写出。写入后,位偏移将为0。

      指定者:
      writeBoolean 在接口 DataOutput
      参数:
      v - 要写入的boolean值。
      抛出:
      IOException - 如果发生I/O错误。
    • writeByte

      void writeByte(int v) throws IOException
      v的8个低位写入流中。忽略v的24个高位。(这意味着对于整数参数,writeBytewrite完全相同。)

      如果流中的位偏移不为零,则当前字节的其余部分将首先填充为0并写出。写入后,位偏移将为0。

      指定者:
      writeByte 在接口 DataOutput
      参数:
      v - 包含要写入的字节值的int
      抛出:
      IOException - 如果发生I/O错误。
    • writeShort

      void writeShort(int v) throws IOException
      v的16个低位写入流中。忽略v的16个高位。如果流使用网络字节顺序,则按顺序写入的字节将是:
       (byte)((v >> 8) & 0xff)
       (byte)(v & 0xff)
       
      否则,将写入以下字节:
       (byte)(v & 0xff)
       (byte)((v >> 8) & 0xff)
       

      如果流中的位偏移不为零,则当前字节的其余部分将首先填充为0并写出。写入后,位偏移将为0。

      指定者:
      writeShort 在接口 DataOutput
      参数:
      v - 包含要写入的short值的int
      抛出:
      IOException - 如果发生I/O错误。
    • writeChar

      void writeChar(int v) throws IOException
      此方法是writeShort的同义词。
      指定者:
      writeChar 在接口 DataOutput
      参数:
      v - 包含要写入的char(无符号short)值的int
      抛出:
      IOException - 如果发生I/O错误。
      参见:
    • writeInt

      void writeInt(int v) throws IOException
      v的32位写入流。如果流使用网络字节顺序,则按顺序写入的字节将是:
       (byte)((v >> 24) & 0xff)
       (byte)((v >> 16) & 0xff)
       (byte)((v >> 8) & 0xff)
       (byte)(v & 0xff)
       
      否则,将写入的字节为:
       (byte)(v & 0xff)
       (byte)((v >> 8) & 0xff)
       (byte)((v >> 16) & 0xff)
       (byte)((v >> 24) & 0xff)
       

      如果流中的位偏移量不为零,则当前字节的剩余部分将首先用0填充并写出。写入后,位偏移量将为0。

      指定者:
      writeInt 在接口 DataOutput
      参数:
      v - 包含要写入的值的int
      抛出:
      IOException - 如果发生I/O错误。
    • writeLong

      void writeLong(long v) throws IOException
      v的64位写入流。如果流使用网络字节顺序,则按顺序写入的字节将是:
       (byte)((v >> 56) & 0xff)
       (byte)((v >> 48) & 0xff)
       (byte)((v >> 40) & 0xff)
       (byte)((v >> 32) & 0xff)
       (byte)((v >> 24) & 0xff)
       (byte)((v >> 16) & 0xff)
       (byte)((v >> 8) & 0xff)
       (byte)(v & 0xff)
       
      否则,将写入的字节为:
       (byte)(v & 0xff)
       (byte)((v >> 8) & 0xff)
       (byte)((v >> 16) & 0xff)
       (byte)((v >> 24) & 0xff)
       (byte)((v >> 32) & 0xff)
       (byte)((v >> 40) & 0xff)
       (byte)((v >> 48) & 0xff)
       (byte)((v >> 56) & 0xff)
       

      如果流中的位偏移量不为零,则当前字节的剩余部分将首先用0填充并写出。写入后,位偏移量将为0。

      指定者:
      writeLong 在接口 DataOutput
      参数:
      v - 包含要写入的值的long
      抛出:
      IOException - 如果发生I/O错误。
    • writeFloat

      void writeFloat(float v) throws IOException
      将一个由四个字节组成的float值写入输出流。它会将此float值转换为int,方法与Float.floatToIntBits方法完全相同,然后以writeInt方法的方式写入int值。

      如果流中的位偏移量不为零,则当前字节的剩余部分将首先用0填充并写出。写入后,位偏移量将为0。

      指定者:
      writeFloat 在接口 DataOutput
      参数:
      v - 包含要写入的值的float
      抛出:
      IOException - 如果发生I/O错误。
    • writeDouble

      void writeDouble(double v) throws IOException
      将一个由八个字节组成的double值写入输出流。它会将此double值转换为long,方法与Double.doubleToLongBits方法完全相同,然后以writeLong方法的方式写入long值。

      如果流中的位偏移量不为零,则当前字节的剩余部分将首先用0填充并写出。写入后,位偏移量将为0。

      指定者:
      writeDouble 在接口 DataOutput
      参数:
      v - 包含要写入的值的double
      抛出:
      IOException - 如果发生I/O错误。
    • writeBytes

      void writeBytes(String s) throws IOException
      将一个字符串写入输出流。对于字符串s中的每个字符,按顺序写入一个字节到输出流。如果snull,则抛出NullPointerException

      如果s.length为零,则不写入任何字节。否则,首先写入字符s[0],然后是s[1],依此类推;最后一个写入的字符是s[s.length-1]。对于每个字符,以writeByte方法的方式写入一个字节,即低位字节。字符串中每个字符的高位八位将被忽略。

      如果流中的位偏移量不为零,则当前字节的剩余部分将首先用0填充并写出。写入后,位偏移量将为0。

      指定者:
      writeBytes 在接口 DataOutput
      参数:
      s - 包含要写入的值的String
      抛出:
      NullPointerException - 如果snull
      IOException - 如果发生I/O错误。
    • writeChars

      void writeChars(String s) throws IOException
      将一个字符串写入输出流。对于字符串s中的每个字符,按顺序写入两个字节到输出流,根据当前字节顺序设置排序。如果使用网络字节顺序,则首先写入高位字节;否则顺序相反。如果snull,则抛出NullPointerException

      如果s.length为零,则不写入任何字节。否则,首先写入字符s[0],然后是s[1],依此类推;最后一个写入的字符是s[s.length-1]

      如果流中的位偏移量不为零,则当前字节的剩余部分将首先用0填充并写出。写入后,位偏移量将为0。

      指定者:
      writeChars 在接口 DataOutput
      参数:
      s - 包含要写入的值的String
      抛出:
      NullPointerException - 如果snull
      IOException - 如果发生I/O错误。
    • writeUTF

      void writeUTF(String s) throws IOException
      在网络字节顺序中向输出流写入两个字节的长度信息,然后跟随字符串s中每个字符的修改后的UTF-8表示。如果snull,则会抛出NullPointerException异常。字符串s中的每个字符根据字符的值被转换为一个、两个或三个字节的组。

      如果字符c\u0001\u007f范围内,则用一个字节表示:

       (byte)c
       

      如果字符c\u0000或在\u0080\u07ff范围内,则用两个字节表示,按照以下顺序写入:

      
       (byte)(0xc0 | (0x1f & (c >> 6)))
       (byte)(0x80 | (0x3f & c))
       

      如果字符c\u0800uffff范围内,则用三个字节表示,按照以下顺序写入:

      
       (byte)(0xe0 | (0x0f & (c >> 12)))
       (byte)(0x80 | (0x3f & (c >> 6)))
       (byte)(0x80 | (0x3f & c))
       

      首先计算表示字符串s中所有字符所需的总字节数。如果这个数字大于65535,则会抛出UTFDataFormatException异常。否则,将以与writeShort方法完全相同的方式将此长度写入输出流;之后,将字符串s中每个字符的一个、两个或三个字节表示写入。

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

      如果流中的位偏移量不为零,则当前字节的剩余部分将首先填充为0并写出。写入后,位偏移量将为0。

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

      指定者:
      writeUTF 在接口 DataOutput
      参数:
      s - 要写入的值的String
      抛出:
      NullPointerException - 如果snull
      UTFDataFormatException - 如果s的修改后的UTF-8表示需要超过65536字节。
      IOException - 如果发生I/O错误。
    • writeShorts

      void writeShorts(short[] s, int off, int len) throws IOException
      在当前位置向流写入一系列short值。如果len为0,则不写入任何内容。首先写入short值s[off],然后是short值s[off + 1],依此类推。流的字节顺序用于确定写入单个字节的顺序。

      如果流中的位偏移量不为零,则当前字节的剩余部分将首先填充为0并写出。写入后,位偏移量将为0。

      参数:
      s - 要写入的short数组。
      off - 数据中的起始偏移量。
      len - 要写入的short数量。
      抛出:
      IndexOutOfBoundsException - 如果off为负数,len为负数,或off + len大于s.length
      NullPointerException - 如果snull
      IOException - 如果发生I/O错误。
    • writeChars

      void writeChars(char[] c, int off, int len) throws IOException
      在当前位置向流写入一系列char值。如果len为0,则不写入任何内容。首先写入char值c[off],然后是char值c[off + 1],依此类推。流的字节顺序用于确定写入单个字节的顺序。

      如果流中的位偏移量不为零,则当前字节的剩余部分将首先填充为0并写出。写入后,位偏移量将为0。

      参数:
      c - 要写入的char数组。
      off - 数据中的起始偏移量。
      len - 要写入的char数量。
      抛出:
      IndexOutOfBoundsException - 如果off为负数,len为负数,或off + len大于c.length
      NullPointerException - 如果cnull
      IOException - 如果发生I/O错误。
    • writeInts

      void writeInts(int[] i, int off, int len) throws IOException
      在当前位置向流写入一系列int值。如果len为0,则不写入任何内容。首先写入int值i[off],然后是int值i[off + 1],依此类推。流的字节顺序用于确定写入单个字节的顺序。

      如果流中的位偏移量不为零,则当前字节的剩余部分将首先填充为0并写出。写入后,位偏移量将为0。

      参数:
      i - 要写入的int数组。
      off - 数据中的起始偏移量。
      len - 要写入的int数量。
      抛出:
      IndexOutOfBoundsException - 如果off为负数,len为负数,或off + len大于i.length
      NullPointerException - 如果inull
      IOException - 如果发生I/O错误。
    • writeLongs

      void writeLongs(long[] l, int off, int len) throws IOException
      在当前位置向流写入一系列long值。如果len为0,则不写入任何内容。首先写入long值l[off],然后是long值l[off + 1],依此类推。流的字节顺序用于确定写入单个字节的顺序。

      如果流中的位偏移量不为零,则当前字节的剩余部分将首先填充为0并写出。写入后,位偏移量将为0。

      参数:
      l - 要写入的long数组。
      off - 数据中的起始偏移量。
      len - 要写入的long数量。
      抛出:
      IndexOutOfBoundsException - 如果off为负数,len为负数,或off + len大于l.length
      NullPointerException - 如果lnull
      IOException - 如果发生I/O错误。
    • writeFloats

      void writeFloats(float[] f, int off, int len) throws IOException
      在当前位置向流写入一系列float值。如果len为0,则不写入任何内容。首先写入float值f[off],然后是float值f[off + 1],依此类推。流的字节顺序用于确定写入单个字节的顺序。

      如果流中的位偏移量不为零,则当前字节的剩余部分将首先填充为0并写出。写入后,位偏移量将为0。

      参数:
      f - 要写入的float数组。
      off - 数据中的起始偏移量。
      len - 要写入的float数量。
      抛出:
      IndexOutOfBoundsException - 如果off为负数,len为负数,或off + len大于f.length
      NullPointerException - 如果fnull
      IOException - 如果发生I/O错误。
    • writeDoubles

      void writeDoubles(double[] d, int off, int len) throws IOException
      在当前位置向流写入一系列double值。如果len为0,则不写入任何内容。首先写入double值d[off],然后是double值d[off + 1],依此类推。流的字节顺序用于确定写入单个字节的顺序。

      如果流中的位偏移量不为零,则当前字节的剩余部分将首先填充为0并写出。写入后,位偏移量将为0。

      参数:
      d - 要写入的double数组。
      off - 数据中的起始偏移量。
      len - 要写入的double数量。
      抛出:
      IndexOutOfBoundsException - 如果off为负数,len为负数,或off + len大于d.length
      NullPointerException - 如果dnull
      IOException - 如果发生I/O错误。
    • writeBit

      void writeBit(int bit) throws IOException
      写入一个位,由参数的最低有效位给出,在当前字节位置的当前位偏移处写入流。参数的高31位被忽略。给定位替换该位置上的先前位。位偏移增加一,并对8取模。

      如果特定字节的任何位在刷新到目的地时从未被设置过,则这些位将自动设置为0。

      参数:
      bit - 一个int,其最低有效位将被写入流。
      抛出:
      IOException - 如果发生I/O错误。
    • writeBits

      void writeBits(long bits, int numBits) throws IOException
      写入一系列位,由bits参数的numBits最低有效位按从左到右的顺序给出,到当前字节位置的当前位偏移处的流。参数的高64 - numBits位被忽略。位偏移增加numBits,并对8取模。请注意,位偏移为0始终表示字节的最高有效位,并且位的字节按遇到的顺序写出。因此,位写入实际上总是按网络字节顺序进行的。实际的流字节顺序设置将被忽略。

      位数据可以在内存中无限累积,直到调用flushBefore。在那时,将写入刷新位置之前的所有位数据。

      如果特定字节的任何位在刷新到目的地时从未被设置过,则这些位将自动设置为0。

      参数:
      bits - 包含要写入的位的long,从位置numBits - 1的位到最低有效位。
      numBits - 介于0和64之间的int,包括0和64。
      抛出:
      IllegalArgumentException - 如果numBits不在0和64之间,包括0和64。
      IOException - 如果发生I/O错误。
    • flushBefore

      void flushBefore(long pos) throws IOException
      将给定位置之前的所有数据刷新到底层目的地,例如OutputStreamFile。尝试寻找到流的刷新部分将导致IndexOutOfBoundsException
      指定者:
      flushBefore 在接口中 ImageInputStream
      参数:
      pos - 包含可以刷新到目的地的流前缀的长度的long
      抛出:
      IndexOutOfBoundsException - 如果pos位于流的刷新部分或超过当前流位置。
      IOException - 如果发生I/O错误。