Java NIO -- Channel

2018-07-04  本文已影响0人  shoulda

java NIO的通道类似与流,但又有些不同。
1.即可以从通道中读数据,又可以写数据到通道,而流的读写一般都是单向的。
2.通道是可以异步读写的
3.通道中的数据总是要先读到一个Buffer,或者总是从一个Buffer写入。
从缓冲区写数据到Channel,从Channel读数据到缓冲区,如下图所示。


牛客.png

Channel的实现

这些是Java NIO中最重要的通道的实现
FileChannel :从文件读写数据
DatagramChannel:通过UDP读写网络中的数据
SocketChannel:可以通过TCP读写网络中的数据
ServerSocketChannel:监听新进来的TCP连接,想Web服务器那样,对每一个新进来的连接都会创建一个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();

参考:http://ifeve.com/channels/

上一篇下一篇

猜你喜欢

热点阅读