- 所有超级接口:
-
AutoCloseable
,Closeable
,DataInput
,DataOutput
,ImageInputStream
- 所有已知实现类:
-
FileCacheImageOutputStream
,FileImageOutputStream
,ImageOutputStreamImpl
,MemoryCacheImageOutputStream
ImageWriter
使用的可寻址输出流接口。各种输出目标,如OutputStream
和File
,以及未来的快速I/O目标,都可以通过适当实现此接口来“包装”,以供Image I/O API使用。
与标准的OutputStream
不同,ImageOutputStream扩展了其对应的ImageInputStream
。因此,在写入时可以从流中读取。相同的寻址和刷新位置适用于读取和写入,尽管在字节对齐写入之前的非零位偏移的语义必然与字节对齐读取之前的非零位偏移的语义不同。在读取字节时,任何位偏移都将设置为0,然后进行读取;在写入字节时,非零位偏移会导致字节中剩余的位被写入为0。然后,字节对齐写入将从下一个字节位置开始。
- 参见:
-
Method Summary
Modifier and TypeMethodDescriptionvoid
flushBefore
(long pos) 将给定位置之前的所有数据刷新到底层目标,如OutputStream
或File
。void
write
(byte[] b) 在当前位置向流中写入一系列字节。void
write
(byte[] b, int off, int len) 在当前位置向流中写入一系列字节。void
write
(int b) 在当前位置向流中写入一个字节。void
writeBit
(int bit) 将参数的最低有效位给定的单个位写入到当前字节位置内的当前位偏移处的流中。void
writeBits
(long bits, int numBits) 将参数bits
的numBits
最低有效位按从左到右的顺序写入到当前字节位置内的当前位偏移处的流中。void
writeBoolean
(boolean v) 向流中写入一个boolean
值。void
writeByte
(int v) 将v
的8个低位写入流中。void
writeBytes
(String s) 向输出流中写入一个字符串。void
writeChar
(int v) 此方法是writeShort
的同义词。void
writeChars
(char[] c, int off, int len) 在当前位置向流中写入一系列字符。void
writeChars
(String s) 向输出流中写入一个字符串。void
writeDouble
(double v) 将由四个字节组成的double
值写入输出流。void
writeDoubles
(double[] d, int off, int len) 在当前位置向流中写入一系列double
值。void
writeFloat
(float v) 将由四个字节组成的float
值写入输出流。void
writeFloats
(float[] f, int off, int len) 在当前位置向流中写入一系列float
值。void
writeInt
(int v) 将v
的32位写入流中。void
writeInts
(int[] i, int off, int len) 在当前位置向流中写入一系列整数。void
writeLong
(long v) 将v
的64位写入流中。void
writeLongs
(long[] l, int off, int len) 在当前位置向流中写入一系列长整型。void
writeShort
(int v) 将v
的16个低位写入流中。void
writeShorts
(short[] s, int off, int len) 在当前位置向流中写入一系列短整型。void
在网络字节顺序中向输出流中写入字符串s
的每个字符的修改后的UTF-8表示,后跟两个字节的长度信息。Methods declared in interface javax.imageio.stream.ImageInputStream
close, flush, getBitOffset, getByteOrder, getFlushedPosition, getStreamPosition, isCached, isCachedFile, isCachedMemory, length, mark, read, read, read, readBit, readBits, readBoolean, readByte, readBytes, readChar, readDouble, readFloat, readFully, readFully, readFully, readFully, readFully, readFully, readFully, readFully, readInt, readLine, readLong, readShort, readUnsignedByte, readUnsignedInt, readUnsignedShort, readUTF, reset, seek, setBitOffset, setByteOrder, skipBytes, skipBytes
-
Method Details
-
write
在当前位置向流中写入一个字节。忽略b
的24个高位。如果流中的位偏移不为零,则当前字节的其余部分将首先填充为0并写出。写入后,位偏移将为0。实现者可以使用
flushBits
方法来保证这一点。- 指定者:
-
write
在接口DataOutput
中 - 参数:
-
b
- 要写入其低8位的int
。 - 抛出:
-
IOException
- 如果发生I/O错误。
-
write
在当前位置向流中写入一系列字节。如果b.length
为0,则不会写入任何内容。首先写入字节b[0]
,然后是字节b[1]
,依此类推。如果流中的位偏移不为零,则当前字节的其余部分将首先填充为0并写出。写入后,位偏移将为0。
- 指定者:
-
write
在接口DataOutput
中 - 参数:
-
b
- 要写入的byte
数组。 - 抛出:
-
NullPointerException
- 如果b
为null
。 -
IOException
- 如果发生I/O错误。
-
write
在当前位置向流中写入一系列字节。如果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
- 如果b
为null
。 -
IOException
- 如果发生I/O错误。
-
writeBoolean
向流中写入一个boolean
值。如果v
为true,则写入值(byte)1
;如果v
为false,则写入值(byte)0
。如果流中的位偏移不为零,则当前字节的其余部分将首先填充为0并写出。写入后,位偏移将为0。
- 指定者:
-
writeBoolean
在接口DataOutput
中 - 参数:
-
v
- 要写入的boolean
值。 - 抛出:
-
IOException
- 如果发生I/O错误。
-
writeByte
将v
的8个低位写入流中。忽略v
的24个高位。(这意味着对于整数参数,writeByte
与write
完全相同。)如果流中的位偏移不为零,则当前字节的其余部分将首先填充为0并写出。写入后,位偏移将为0。
- 指定者:
-
writeByte
在接口DataOutput
中 - 参数:
-
v
- 包含要写入的字节值的int
。 - 抛出:
-
IOException
- 如果发生I/O错误。
-
writeShort
将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
此方法是writeShort
的同义词。- 指定者:
-
writeChar
在接口DataOutput
中 - 参数:
-
v
- 包含要写入的char(无符号short)值的int
。 - 抛出:
-
IOException
- 如果发生I/O错误。 - 参见:
-
writeInt
将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
将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
将一个由四个字节组成的float
值写入输出流。它会将此float
值转换为int
,方法与Float.floatToIntBits
方法完全相同,然后以writeInt
方法的方式写入int值。如果流中的位偏移量不为零,则当前字节的剩余部分将首先用0填充并写出。写入后,位偏移量将为0。
- 指定者:
-
writeFloat
在接口DataOutput
中 - 参数:
-
v
- 包含要写入的值的float
。 - 抛出:
-
IOException
- 如果发生I/O错误。
-
writeDouble
将一个由八个字节组成的double
值写入输出流。它会将此double
值转换为long
,方法与Double.doubleToLongBits
方法完全相同,然后以writeLong
方法的方式写入long值。如果流中的位偏移量不为零,则当前字节的剩余部分将首先用0填充并写出。写入后,位偏移量将为0。
- 指定者:
-
writeDouble
在接口DataOutput
中 - 参数:
-
v
- 包含要写入的值的double
。 - 抛出:
-
IOException
- 如果发生I/O错误。
-
writeBytes
将一个字符串写入输出流。对于字符串s
中的每个字符,按顺序写入一个字节到输出流。如果s
为null
,则抛出NullPointerException
。如果
s.length
为零,则不写入任何字节。否则,首先写入字符s[0]
,然后是s[1]
,依此类推;最后一个写入的字符是s[s.length-1]
。对于每个字符,以writeByte
方法的方式写入一个字节,即低位字节。字符串中每个字符的高位八位将被忽略。如果流中的位偏移量不为零,则当前字节的剩余部分将首先用0填充并写出。写入后,位偏移量将为0。
- 指定者:
-
writeBytes
在接口DataOutput
中 - 参数:
-
s
- 包含要写入的值的String
。 - 抛出:
-
NullPointerException
- 如果s
为null
。 -
IOException
- 如果发生I/O错误。
-
writeChars
将一个字符串写入输出流。对于字符串s
中的每个字符,按顺序写入两个字节到输出流,根据当前字节顺序设置排序。如果使用网络字节顺序,则首先写入高位字节;否则顺序相反。如果s
为null
,则抛出NullPointerException
。如果
s.length
为零,则不写入任何字节。否则,首先写入字符s[0]
,然后是s[1]
,依此类推;最后一个写入的字符是s[s.length-1]
。如果流中的位偏移量不为零,则当前字节的剩余部分将首先用0填充并写出。写入后,位偏移量将为0。
- 指定者:
-
writeChars
在接口DataOutput
中 - 参数:
-
s
- 包含要写入的值的String
。 - 抛出:
-
NullPointerException
- 如果s
为null
。 -
IOException
- 如果发生I/O错误。
-
writeUTF
在网络字节顺序中向输出流写入两个字节的长度信息,然后跟随字符串s
中每个字符的修改后的UTF-8表示。如果s
为null
,则会抛出NullPointerException
异常。字符串s
中的每个字符根据字符的值被转换为一个、两个或三个字节的组。如果字符
c
在\u0001
到\u007f
范围内,则用一个字节表示:(byte)c
如果字符
c
是\u0000
或在\u0080
到\u07ff
范围内,则用两个字节表示,按照以下顺序写入:(byte)(0xc0 | (0x1f & (c >> 6))) (byte)(0x80 | (0x3f & c))
如果字符
c
在\u0800
到uffff
范围内,则用三个字节表示,按照以下顺序写入:(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
- 如果s
为null
。 -
UTFDataFormatException
- 如果s
的修改后的UTF-8表示需要超过65536字节。 -
IOException
- 如果发生I/O错误。
-
writeShorts
在当前位置向流写入一系列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
- 如果s
为null
。 -
IOException
- 如果发生I/O错误。
-
writeChars
在当前位置向流写入一系列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
- 如果c
为null
。 -
IOException
- 如果发生I/O错误。
-
writeInts
在当前位置向流写入一系列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
- 如果i
为null
。 -
IOException
- 如果发生I/O错误。
-
writeLongs
在当前位置向流写入一系列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
- 如果l
为null
。 -
IOException
- 如果发生I/O错误。
-
writeFloats
在当前位置向流写入一系列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
- 如果f
为null
。 -
IOException
- 如果发生I/O错误。
-
writeDoubles
在当前位置向流写入一系列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
- 如果d
为null
。 -
IOException
- 如果发生I/O错误。
-
writeBit
写入一个位,由参数的最低有效位给出,在当前字节位置的当前位偏移处写入流。参数的高31位被忽略。给定位替换该位置上的先前位。位偏移增加一,并对8取模。如果特定字节的任何位在刷新到目的地时从未被设置过,则这些位将自动设置为0。
- 参数:
-
bit
- 一个int
,其最低有效位将被写入流。 - 抛出:
-
IOException
- 如果发生I/O错误。
-
writeBits
写入一系列位,由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
将给定位置之前的所有数据刷新到底层目的地,例如OutputStream
或File
。尝试寻找到流的刷新部分将导致IndexOutOfBoundsException
。- 指定者:
-
flushBefore
在接口中ImageInputStream
- 参数:
-
pos
- 包含可以刷新到目的地的流前缀的长度的long
。 - 抛出:
-
IndexOutOfBoundsException
- 如果pos
位于流的刷新部分或超过当前流位置。 -
IOException
- 如果发生I/O错误。
-