java技术基础java nioJava学习笔记

Java NIO 教程(二) Channel

2017-06-06  本文已影响917人  步积

参考:http://ifeve.com/channels/
原文地址

目录

Java NIO的通道类似流,但又有些不同:

正如上面所说,从通道读取数据到缓冲区,从缓冲区写入数据到通道。如下图所示:

NIO 数据读写流程

Channel的实现

这些是Java NIO中最重要的通道的实现:

FileChannel
DatagramChannel
SocketChannel
ServerSocketChannel

基本的 Channel 示例

下面是一个使用FileChannel读取数据到Buffer中的示例:

    private static void useNio(){
        RandomAccessFile aFile = null;
        try {
            aFile = new RandomAccessFile("/Users/sschen/Documents/SerialVersion.txt", "rw");
            FileChannel inChannel = aFile.getChannel();

            ByteBuffer byteBuffer = ByteBuffer.allocate(48);
            int byteReader = inChannel.read(byteBuffer);

            while (byteReader != -1) {
                System.out.println("Read:" + byteReader);
                byteBuffer.flip();

                while (byteBuffer.hasRemaining()) {
                    System.out.println((char)byteBuffer.get());
                }

                byteBuffer.clear();

                byteReader = inChannel.read(byteBuffer);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        finally {
            try {
                aFile.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

注意 buf.flip() 的调用,首先读取数据到Buffer,然后反转Buffer,接着再从Buffer中读取数据。下一节会深入讲解Buffer的更多细节。

上一篇 下一篇

猜你喜欢

热点阅读