public interface GatheringByteChannel extends WritableByteChannel
采集写入操作在单个调用中写入一个或多个缓冲器序列中的一个或多个字节序列。 在实现网络协议或文件格式时,收集写入通常很有用,例如,将数据分组到由一个或多个固定长度的标题后跟可变长度的主体组成的段中。 类似的散射读操作都在定义ScatteringByteChannel
接口。
Modifier and Type | Method and Description |
---|---|
long |
write(ByteBuffer[] srcs)
从给定的缓冲区向该通道写入一系列字节。
|
long |
write(ByteBuffer[] srcs, int offset, int length)
从给定缓冲区的子序列将一个字节序列写入该通道。
|
write
long write(ByteBuffer[] srcs, int offset, int length) throws IOException
尝试写入r个字节到该通道,其中r是给定缓冲区数组的指定子序列中剩余的总字节数,也就是说,
在此方法被调用的时刻。srcs[offset].remaining() + srcs[offset+1].remaining() + ... + srcs[offset+length-1].remaining()
假设写入长度为n的字节序列,其中0 <= n <= r 。 直到该序列的第一个srcs[offset].remaining()字节从缓冲器srcs[offset]写入,直到下一个srcs[offset+1].remaining()字节从缓冲器srcs[offset+1]写入,等等,直到写入整个字节序列。 尽可能多的字节从每个缓冲区写入,因此除了最后更新的缓冲区之外,每个更新的缓冲区的最终位置被保证等于该缓冲区的限制。
除非另有规定,写入操作将仅在写入所有r个请求的字节后才会返回。 某些类型的通道取决于它们的状态,可能仅写入一些字节,或者可能只写入一些字节。 例如,在非阻塞模式下的套接字通道不能再写入比套接字输出缓冲区中的任何字节更多的字节。
可以随时调用此方法。 但是,如果另一个线程已经在该通道上启动了写入操作,那么此方法的调用将阻塞,直到第一个操作完成。
srcs
- 要检索字节的缓冲区
offset
- 要检索字节的第一个缓冲区的缓冲区中的偏移量;
必须是非负数,不得大于srcs.length
length
- 要访问的最大缓冲区数;
必须是非负数,不得大于srcs.length - offset
IndexOutOfBoundsException
- 如果
offset和
length参数的前提条件不成立
NonWritableChannelException
- 如果这个频道没有开放写作
ClosedChannelException
- 如果此通道关闭
AsynchronousCloseException
- 如果另一个线程在写操作正在进行时关闭此通道
ClosedByInterruptException
- 如果另一个线程在写操作正在进行时中断当前线程,从而关闭通道并设置当前线程的中断状态
IOException
- 如果发生其他I / O错误
long write(ByteBuffer[] srcs) throws IOException
调用此方法的形式为c.write(srcs)的行为方式与调用完全相同
c.write(srcs, 0, srcs.length);
srcs
- 要检索字节的缓冲区
NonWritableChannelException
- 如果这个频道没有开放写作
ClosedChannelException
- 如果此频道关闭
AsynchronousCloseException
- 如果另一个线程在写操作正在进行时关闭此通道
ClosedByInterruptException
- 如果另一个线程在写操作正在进行时中断当前线程,从而关闭通道并设置当前线程的中断状态
IOException
- If some other I/O error occurs