-
- All Superinterfaces:
-
AutoCloseable
,Channel
,Closeable
,WritableByteChannel
- 所有已知实现类:
-
DatagramChannel
,FileChannel
,Pipe.SinkChannel
,SocketChannel
public interface GatheringByteChannel extends WritableByteChannel
可以从缓冲区序列中写入字节的通道。采集写入操作在单个调用中写入一个或多个缓冲器序列中的一个或多个字节序列。 在实现网络协议或文件格式时,收集写入通常很有用,例如,将数据分组到由一个或多个固定长度的标题后跟可变长度的主体组成的段中。 类似的散射读取操作在
ScatteringByteChannel
界面中定义。- 从以下版本开始:
- 1.4
-
-
方法摘要
所有方法 接口方法 抽象方法 Modifier and Type 方法 描述 long
write(ByteBuffer[] srcs)
从给定的缓冲区向该通道写入一系列字节。long
write(ByteBuffer[] srcs, int offset, int length)
从给定缓冲区的子序列将一个字节序列写入该通道。-
Methods inherited from interface java.nio.channels.WritableByteChannel
write
-
-
-
-
方法详细信息
-
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
<=
Ñ<=
河 直到该序列的第一个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错误
-
write
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
-
-