总结
- 实现AsynchronousByteChannel接口表示该类是可以读取和写入字节的异步通道
- 某些通道可能不允许在任何给定时间有多个未完成的读或写操作。如果线程在前一个读取操作完成之前调用了读取方法,那么将抛出ReadPendingException。类似地,如果在上一次写入完成之前调用了写入方法,则会抛出WritePendingException
- 请注意,ByteBuffer对于多个并发线程来说是不安全的。启动读或写操作时,必须注意确保在操作完成之前不会访问缓冲区
AsynchronousByteChannel接口方法
方法名 | 作用 |
---|---|
void read(ByteBuffer dst, A attachment, CompletionHandler<Integer,? super A> handler) | 从该通道将字节序列读入给定的缓冲区ByteBuffer, attachment是附件,传递给 handler的回调函数的附件,启动异步读取操作,到时等系统完成任务后自动调用回调函数,会自动把attachment再传回来,并传回一个Integer表示此次读取字节的数目 |
Future< Integer> read(ByteBuffer dst) | 从该通道将字节序列读入给定的缓冲区ByteBuffer,启动异步读取操作,没有回调函数,只有返回的Future的对象,Future的对象的get方法会阻塞的返回读取的字节数 |
void write(ByteBuffer src, A attachment, CompletionHandler<Integer,? super A> handler) | 从给定缓冲区将字节序列写入此通道,有attachment附件,有回调函数,启动异步写入操作,当异步写入操作完成,会自动调用回调函数,回调函数返回写入字节数目和当时注册异步时传入的附件attachment |
Future< Integer> write(ByteBuffer src) | 从给定缓冲区将字节序列写入此通道,启动异步写入操作,没有回调函数,只有返回的Future的对象,Future的对象的get方法会阻塞的返回写入的字节数 |