Java NIO Channel
该系列文章翻译自:http://tutorials.jenkov.com/java-nio/overview.html
留作记录而已,顺便方便大家查阅
Channel有一点像Stream,单也有一些不同:
- 您可以向同一个Channel读取或者写入。但流通常是单向的(读或写)。
- Channel可以异步读写。
- Channel总是向Buffer读取或写入。
如上所述,你只能将数据从通道读取到缓冲区中,或者将数据从缓冲区写入通道中。下图是一个说明:
Channel 的几个实现
- FileChannel
- DatagramChannel
- SocketChannel
- ServerSocketChannel
FileChannel从文件读取数据或向文件读取数据。
DatagramChannel可以通过UDP通过网络读取和写入数据。
SocketChannel可以通过TCP通过网络读取和写入数据。
ServerSocketChannel允许您像Web服务器一样侦听传入的TCP连接。对于每个传入连接,都会创建一个SocketChannel。
Channel 基本使用示例
RandomAccessFile aFile = new RandomAccessFile("data/nio-data.txt", "rw");
FileChannel inChannel = aFile.getChannel();
ByteBuffer buf = ByteBuffer.allocate(48);
int bytesRead = inChannel.read(buf);
while (bytesRead != -1) {
System.out.println("Read " + bytesRead);
buf.flip();
while(buf.hasRemaining()){
System.out.print((char) buf.get());
}
buf.clear();
bytesRead = inChannel.read(buf);
}
aFile.close();
请注意buf.flip()调用。
首先将数据读入缓冲区。然后翻转缓冲区。然后读数据出来。在下一个有关Buffer 的文章中,我将对此进行详细介绍。