Channel

2018-12-04  本文已影响0人  JiinYuu

Java NIO的Channel和流很像,但又有些不同:

如上所述,你从Channel读入数据到Buffer,从Buffer写数据到Channel。如下图:

Channel将数据读入Buffer,Buffer将数据写入Channel

Channel Implementations

以下是Java NIO中最重要的几个Channel实现:

FileChannel从文件读取数据。

DatagramChannel以UDP协议读写网络数据;

SocketChannel通过TCP协议读写网络数据;

ServerSocketChannel允许你像一个web服务器一样监听接入的TCP连接。每个接入连接都会都一个对应的SocketChannel

Basic Channel Example

以下是一个使用FileChannel读取数据到Buffer的简单例子:

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) {
    buf.flip();
    
    while (buf.hasRemaining()) {
        System.out.print((char) buf.get());
    }

    buf.clear();
    bytesRead = inChannel.read(buf);
}
aFile.close();

注意buf.flip()这个调用。首先将数据读入Buffer,然后flip,然后get。下篇文章我会详细介绍Buffer的更多细节。

说明

发现貌似有人在看这个系列文章了,有必要说明下,这个Java NIO系列来源于jenkov.com,本文只是翻译,希望大家千万不要误会,本文不是原创。原文地址:Java NIO

上一篇 下一篇

猜你喜欢

热点阅读