美文网首页
3. Java NIO Channel

3. Java NIO Channel

作者: kopshome | 来源:发表于2018-04-20 17:26 被阅读0次

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

    • 你既可以读也可以往channel里写。stream一般是单向的(读或者写)
    • channel读写是异步的
    • channel总是从buffer里读,或向buffer里写

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

    Channel的实现

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

    • FileChannel
    • DatagramChannel
    • SocketChannel
    • ServerSocketChannel

    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教程目录贴地址

    相关文章

      网友评论

          本文标题:3. Java NIO Channel

          本文链接:https://www.haomeiwen.com/subject/dijzkftx.html