Java NIO Channel

2018-06-05  本文已影响0人  d3f59bfc7013

Java NIO Channel(通道)与Java IO 的Stream(流)很相似但是有几点不同:

如上所述,您将通道中的数据读入缓冲区,并将数据从缓冲区写入通道。 这是一个例子:

通道将数据读入缓冲区,缓冲区将数据写入通道

Channel 实现

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

FileChannel负责文件数据的读入或者写出。

DatagramChannel能够读入或者写出基于UDP协议的数据。

SocketChannel能够读入或者写出基于TCP协议的数据。

ServerSocketChannel允许您监听传入的TCP连接,就像Web服务器一样。 为每个传入连接创建一个SocketChannel。

基本的Channel示例:
以下一个基本的例子,它使用FileChannel将一些数据读入缓冲区:

import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;

/**
 * @author: gethin
 * @create: 2018-06-05 20:52
 * @description:
 **/
public class BasicChannelExample {
    public static void main(String[] args) throws IOException {
        RandomAccessFile aFile = new RandomAccessFile("test.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的文章中详细介绍这方面的内容。上述代码结果示例如下:

Channel读入文件示例

上一节:Java NIO 概述
下一节:Java NIO Buffer


上一篇 下一篇

猜你喜欢

热点阅读