-
- All Superinterfaces:
-
AutoCloseable
,Channel
,Closeable
,WritableByteChannel
- 所有已知实现类:
-
DatagramChannel
,FileChannel
,Pipe.SinkChannel
,SocketChannel
public interface GatheringByteChannelextends WritableByteChannel
一个可以从一系列缓冲区写入字节的通道。收集写入操作在单个调用中写入来自给定缓冲器序列中的一个或多个的字节序列。 在实现网络协议或文件格式时,收集写入通常很有用,例如,将数据分组为由一个或多个固定长度标头后跟可变长度主体组成的段。 类似的散射读取操作在
ScatteringByteChannel
接口中定义。- 从以下版本开始:
- 1.4
-
-
方法摘要
所有方法 实例方法 抽象方法 变量和类型 方法 描述 long
write(ByteBuffer[] srcs)
从给定的缓冲区向该通道写入一个字节序列。long
write(ByteBuffer[] srcs, int offset, int length)
从给定缓冲区的子序列向该通道写入一个字节序列。-
声明方法的接口 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
<=
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错误
-
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
-
-