java.nio.channels

接口
异常
所有超级接口:
Channel, Closeable
所有已知子接口:
ByteChannel, GatheringByteChannel
所有已知实现类:
DatagramChannel, FileChannel, Pipe.SinkChannel, SocketChannel

public interface WritableByteChannel
     
extends Channel

可写入字节的通道。

在任意给定时刻,一个可写入通道上只能进行一个写入操作。如果某个线程在通道上发起写入操作,那么在第一个操作完成之前,将阻塞其他所有试图发起另一个写入操作的线程。其他种类的 I/O 操作是否继续与写入操作并发执行则取决于该通道的类型。

从以下版本开始:
1.4

方法摘要
 int write(ByteBuffer src)
          将字节序列从给定的缓冲区中写入此通道。
 
从接口 java.nio.channels.Channel 继承的方法
close, isOpen
 

方法详细信息

write

int write(ByteBuffer src)
          throws IOException
将字节序列从给定的缓冲区中写入此通道。

尝试最多向该通道中写入 r 个字节,其中 r 是调用此方法时缓冲区中剩余的字节数,即 src.remaining()

假定写入长度为 n 的字节序列,其中 0 <= n <= r。从缓冲区的索引 p 处开始传输该字节,其中 p 是调用此方法时该缓冲区的位置;最后写入的字节索引是 p + n - 1。返回时,该缓冲区的位置将等于 p + n;其限制不会更改。

除非另行指定,否则仅在写入所有请求的 r 个字节后 write 操作才会返回。有些类型的通道(取决于它们的状态)可能仅写入某些字节或者可能根本不写入。例如,处于非阻塞模式的套接字通道只能写入该套接字输出缓冲区中的字节。

可在任意时间调用此方法。但是如果另一个线程已经在此通道上发起了一个写入操作,则在该操作完成前此方法的调用被阻塞。

参数:
src - 要从中获取字节的缓冲区
返回:
写入的字节数,可能为零
抛出:
NonWritableChannelException - 如果此通道未对写入打开
ClosedChannelException - 如果此通道已关闭
AsynchronousCloseException - 如果正在进行写入操作时另一个线程关闭了此通道
ClosedByInterruptException - 如果正在进行写入操作时另一个线程中断了当前线程,因此关闭了该通道并将当前线程的状态设置为中断
IOException - 如果发生其他 I/O 错误