zoukankan      html  css  js  c++  java
  • [翻译] java NIO Channel

    原文地址;http://tutorials.jenkov.com/java-nio/channels.html

    JAVA NIO channels和流的概念很像,下面是他们的一些区别:

    • 你可以对channel进行读写,流只能一种操作(读或写)。
    • channel可以异步的读写。
    • channel总是读入、写出到buffer。

    根据上面提到的,你可以从channel中读取数据到buffer中,也可以从buffer中写入数据到channel中。下即可解释:

    JAVA NIO: channels读入数据到buffers,buffers写入数据到channels

     

    Channel 实现

    下面是JAVA NIO 中最重要的channel的实现。

    • FileChannel
    • DatagramChannel
    • SocketChannel
    • ServerSocketChannel

    FileChannel从文件中读写数据。

    DatagramChannel通过UDP读写数据。

    SocketChannel通过TCP读写数据。

    ServerSocketChannel像一个web server那样,允许你监听TCP连接。每一个连接都会产生一个SocketChannel。

    一个简单的Channel的例子:

    下面是一个简单的使用FileChannel的例子,读取一些数据到Buffer中。

     1     RandomAccessFile aFile = new RandomAccessFile("data/nio-data.txt", "rw");
     2     FileChannel inChannel = aFile.getChannel();
     3 
     4     ByteBuffer buf = ByteBuffer.allocate(48);
     5 
     6     int bytesRead = inChannel.read(buf);
     7     while (bytesRead != -1) {
     8 
     9       System.out.println("Read " + bytesRead);
    10       buf.flip();
    11 
    12       while(buf.hasRemaining()){
    13           System.out.print((char) buf.get());
    14       }
    15 
    16       buf.clear();
    17       bytesRead = inChannel.read(buf);
    18     }
    19     aFile.close();

    注意flip()方法的调用,开始你读取数据到buffer,然后转换,即由读转换到写,然后从buffer中读取数据。这个问题将会在下一节的Buffer中详细的介绍。

  • 相关阅读:
    Qt之数据类型转换
    [leetcode] Sudoku Solver
    调用摄像头拍照实例,摇一摇实例
    html 标签
    JavaScript 常见的六种继承方式
    js的DOM的方法和属性总结
    BOM属性方法。
    DOM 元素对象的属性方法
    完整的用户代理字符串检测
    可以跨浏览器获得窗口左边,和上边的位置
  • 原文地址:https://www.cnblogs.com/hitandrew/p/3339962.html
Copyright © 2011-2022 走看看