3. Java NIO Channel

2018-04-20  本文已影响0人  kopshome

Java NIO 的Channel与stream有些相似,但略有不同:

如上面提到的,你读数据是channel向buffer,而写数据则是buffer写入到channel,下面是相关的示意图:

Channel的实现

下面是Java NIO中最重要的channel实现:

FileChannel可以读或写文件。
DatagramChannel可以使用UDP在网络上读写数据。
SocketChannel可以使用TCP在网络上读写数据。
ServerSocketChannel可以让你监听即将到来的TCP连接,就像web服务做得一样。为每个到来的连接创建ServerSocketChannel。

channel的基础示例

下面是一个基础示例,使用了FileChannel去读数据至buffer中:

RandomAccessFile aFile = new RandomAccessFile("C:\\Users\\DELL\\Desktop\\channel.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。然后你反转(flip)buffer。然后从中读取数据。这些具体的细节,会在下一节给出详细说明。


想要查看此教程的目录请点击:Java NIO教程目录贴地址

上一篇下一篇

猜你喜欢

热点阅读