- 所有父级接口:
AutoCloseable,Channel,Closeable,WritableByteChannel
- 所有已知的实现类:
DatagramChannel,FileChannel,Pipe.SinkChannel,SocketChannel
可以从一系列缓冲区写入字节的通道。
A 搜集写操作在一次调用中写入来自一个或多个给定缓冲区序列的字节序列。收集写入在实现网络协议或文件格式时通常很有用,例如,将数据分组到由一个或多个固定长度的标头和后跟可变长度的主体组成的段中。相似的散射读取操作在ScatteringByteChannel 接口中定义。
- 自从:
- 1.4
-
方法总结
修饰符和类型方法描述longwrite(ByteBuffer[] srcs) 将给定缓冲区中的字节序列写入此通道。longwrite(ByteBuffer[] srcs, int offset, int length) 从给定缓冲区的子序列中将字节序列写入此通道。在接口 java.nio.channels.WritableByteChannel 中声明的方法
write
-
方法详情
-
write
从给定缓冲区的子序列中将字节序列写入此通道。试图写到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.lengthlength- 要访问的最大缓冲区数;必须为非负且不大于srcs.length-offset- 返回:
- 写入的字节数,可能为零
- 抛出:
IndexOutOfBoundsException- 如果offset和length参数的先决条件不成立NonWritableChannelException- 如果此通道未打开进行写入ClosedChannelException- 如果此通道关闭AsynchronousCloseException- 如果另一个线程在写操作正在进行时关闭此通道ClosedByInterruptException- 如果另一个线程在写操作正在进行时中断当前线程,从而关闭通道并设置当前线程的中断状态IOException- 如果发生其他 I/O 错误
-
write
将给定缓冲区中的字节序列写入此通道。对
c.write(srcs)形式的方法的调用与调用的行为完全相同c.write(srcs, 0, srcs.length);
- 参数:
srcs- 要从中检索字节的缓冲区- 返回:
- 写入的字节数,可能为零
- 抛出:
NonWritableChannelException- 如果此通道未打开进行写入ClosedChannelException- 如果此通道关闭AsynchronousCloseException- 如果另一个线程在写操作正在进行时关闭此通道ClosedByInterruptException- 如果另一个线程在写操作正在进行时中断当前线程,从而关闭通道并设置当前线程的中断状态IOException- 如果发生其他 I/O 错误
-