将字节序列从给定缓冲区的子序列写入此通道。
尝试最多向此通道中写入 r 个字节,其中 r 是给定缓冲区数组的指定子序列中剩余的字节数,也就是
srcs[offset].remaining()
+ srcs[offset+1].remaining()
+ ... + srcs[offset+length-1].remaining()
假定写入长度为 n 的字节序列,其中 0 <= n <= r。从缓冲区 srcs[offset] 中写入此序列的前 srcs[offset].remaining() 个字节,然后从缓冲区 srcs[offset+1] 中写入后面的 srcs[offset+1].remaining() 个字节,依此类推,直到写入整个字节序列。从每个缓冲区中写入尽可能多的字节,因为要保证每个已更新缓冲区(最后一个已更新缓冲区除外)的最终位置等于该缓冲区的限制。
除非另行指定,否则仅在写入所有请求的 r 个字节后 write 操作才会返回。有些类型的通道(取决于它们的状态)可能仅写入某些字节或者可能根本不写入。例如,处于非阻塞模式的套接字通道无法写入超出该套接字输出缓冲区剩余空间的字节。
可在任意时间调用此方法。但是如果另一个线程已经在此通道上发起了一个写入操作,则在该操作完成前此方法的调用被阻塞。
- 参数:
src
- 要获取其中字节的缓冲区offset
- 第一个缓冲区(要获取该缓冲区中的字节)在缓冲区数组中的偏移量;必须为非负数并且不能大于 srcs.lengthlength
- 要访问的最大缓冲区数;必须为非负数并且不能大于 srcs.length - offset
- 返回:
- 写入的字节数,可能为零
- 抛出:
indexoutofboundsexception
- 如果关于 offset 和 length 参数的前提不成立
nonwritablechannelexception
- 如果不允许对此通道进行写入操作
closedchannelexception
- 如果此通道已关闭
asynchronouscloseexception
- 如果正在进行写入操作时另一个线程关闭了此通道
closedbyinterruptexception
- 如果正在进行写入操作时另一个线程中断了当前线程,因此关闭了该通道并将当前线程的状态设置为中断
ioexception
- 如果发生其他 i/o 错误