Java NIO(三)Channel 通道

java nio channel 和 流有一些小小的区别:

  • 你能在channel进行读写二者,但是流只能进行读者其一。
  • channel能异步进行读写。
  • channel一般从(借助)buffer进行读写。
    如下图所示:


    image.png

Channel Implementations

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

  • FileChannel
  • DatagramChannel
  • SocketChannel
  • ServerSocketChannel
    The FileChannel 从文件读取数据。
    The DatagramChannel 可以通过UDP在网络上读写数据。
    The SocketChannel 可以通过TCP在网络上读写数据。
    The ServerSocketChannel允许您监听传入的TCP连接,就像Web服务器一样。 为每个传入的连接创建一个SocketChannel。

实战

Here is a basic example that uses a FileChannel to read some data into a Buffer:
一个简单的例子:用FileChannel去读数据从Buffer里

    RandomAccessFile aFile = new RandomAccessFile("data/nio-data.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()的调用,首先读入一个缓冲区,然后将内容弹出,然后读出数据。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Java NIO(New IO)是从Java 1.4版本开始引入的一个新的IO API,可以替代标准的Java I...
    JackChen1024阅读 8,099评论 1赞 143
  • 前言: 之前的文章《Java文件IO常用归纳》主要写了Java 标准IO要注意的细节和技巧,由于网上各种学习途径,...
    androidjp阅读 3,381评论 0赞 22
  • (转载说明:本文非原创,转载自http://ifeve.com/java-nio-all/) Java NIO: ...
    柳岸阅读 961评论 0赞 3
  • (转载说明:本文非原创,转载自http://ifeve.com/java-nio-all/) Java NIO: ...
    数独题阅读 912评论 0赞 3
  • 原文地址http://www.importnew.com/19816.html 概述 NIO主要有三个核心部分:C...
    期待现在阅读 1,028评论 0赞 4

友情链接更多精彩内容