Java NIO 通道(Channel)

Java NIO的Channel和流(Streams)很相似,但是也有一些区别:

  • Channel是双向的,你可以从Channel中读取,也可以向Channel中写入。但是Streams是单向的(只读或只写);
  • Channel可以异步进行读写操作; Channel只和缓冲区(Buffer)进行交互(读或写);

就像上面所说的,我们可以从Channel中读取数据放入Buffer,也可以将Buffer中的数据写入Channel中。如下图所示:

Channel的实现类

下面是Java NIO中的一些重要的Channel实现类:

  • FileChannel
  • DatagramChannel
  • SocketChannel
  • ServerSocketChannel

上面的几种Channel的实现类包括了文件IO、UDP IO和TCP IO等方面。其中:
FileChannel操作文件IO。
DatagramChannel操作UDP IO。
SocketChannel操作TCP IO中的客户端。
ServerSocketChannel可以监听连接请求,就像服务器端的工作一样。每有一个连接,就会创建一个SocketChannel

Channel使用的基本例子

下面的例子使用FileChannel来将文件中的数据读取到一个Buffer:

import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;public class FileChannelTest {public static void main(String[] args) throws IOException {RandomAccessFile aFile=new RandomAccessFile("nio-data.txt", "rw");FileChannel in=aFile.getChannel();ByteBuffer buf=ByteBuffer.allocate(2048);int bytesRead=in.read(buf);while(bytesRead!=-1) {System.out.println("Read "+bytesRead);buf.flip();while(buf.hasRemaining()) System.out.print((char)buf.get());buf.clear();bytesRead=in.read(buf);}aFile.close();}
}

注意上面的buf.flip()调用。首先将数据读入Buffer,然后flip这个Buffer。具体的解释会在后面介绍。

Java NIO Channel相关推荐

  1. 03. Java NIO Channel 通道

    2019独角兽企业重金招聘Python工程师标准>>> Java NIO Channel通道和流非常相似,主要有以下几点区别: 通道可以度也可以写,流一般来说是单向的(只能读或者写) ...

  2. 二、Java NIO Channel

    一.Java NIO 网络编程 二.Java NIO Channel 三.Java NIO Buffer 四.Java NIO Selector 五.Java NIO 扩展组件 一.Channel 概 ...

  3. java nio channel原理_Java NIO 选择器(Selector)与通道(Channel) 原理 | 学步园

    NIO底层实现poll, epoll(jdk1.5update 9  和jdk1.6  仅限于 linux 2.6以上 ) Java NIO 选择器(Selector) 知识预备 (linux epo ...

  4. Java NIO之Channel(通道)

    **Java高级特性增强-NIO 本部分网络上有大量的资源可以参考,在这里做了部分整理并做了部分勘误,感谢前辈的付出,每节文章末尾有引用列表~ 写在所有文字的前面:作者在此特别推荐Google排名第一 ...

  5. JAVA NIO之文件通道

    1.简介 通道是 Java NIO 的核心内容之一,在使用上,通道需和缓存类(ByteBuffer)配合完成读写等操作.与传统的流式 IO 中数据单向流动不同,通道中的数据可以双向流动.通道既可以读, ...

  6. 我所理解的Java NIO

    这两天了解了一下关于NIO方面的知识,网上关于这一块的介绍只是介绍了一下基本用法,没有系统的解释NIO与阻塞.非阻塞.同步.异步之间的联系,导致自己困扰了好久.本篇文章就个人关于NIO的理解进行阐述. ...

  7. Java NIO学习

    概述 NIO是一种基于缓存的.非阻塞的异步IO.NIO主要涉及到三个概念:Buffer(缓存),Channel(通道),Selector(选择器).NIO和传统IO不同在于:NIO是基于缓存的,而传统 ...

  8. Java NIO Introduction

    2019独角兽企业重金招聘Python工程师标准>>> Java NIO (New IO) is an alternative IO API for Java (from Java ...

  9. 海纳百川而来的一篇相当全面的Java NIO教程

    目录 零.NIO包 一.Java NIO Channel通道 Channel的实现(Channel Implementations) Channel的基础示例(Basic Channel Exampl ...

最新文章

  1. C# 中的eval ()函数
  2. 如何将页脚固定在页面底部
  3. 怎么查看Beyond Compare所有会话日志消息
  4. xunit-ICollectionFixture
  5. 掘金外链即将失效?论如何用脚本一次性下载/替换失效的外链图片
  6. java垃圾收集器zgc_java虚拟机ZGC垃圾收集器的实现方法
  7. ESXi vSphere Client中copy paste如何启用
  8. 计算机原理课 如何在中小学课堂中变成有趣,在课堂中如何发挥电教辅助教学优势...
  9. 算法竞赛进阶指南 pdf_限时!字节跳动大牛2个月标星达70k的算法笔记,免费开源...
  10. 了解uni-app只需这一篇就足够了
  11. Beyond Compare 4 “授权秘钥已被吊销“ 的解决办法
  12. 深度学习在文本分类中的应用
  13. related knowledge points about protein
  14. 菜鸟学习 - Unity中的热更新 - Lua和C#通信
  15. 英文阅读积累 - 2019年4月
  16. Python发送邮件(demo)
  17. kali 中 嗅探工具 如何分类
  18. bootstrap X-editable使用。
  19. Linux设备模型剖析系列之二(uevent、sysfs)
  20. 计算机电源可调电阻,PC电源改可调电源

热门文章

  1. JSON学习资料整理
  2. 神话人物的现代版简历
  3. python运行结果图_[宜配屋]听图阁
  4. 华为5720设置静态路由不通_【干货分享】交换机与路由器在环路中的处理机制了解一下!...
  5. html 手机端无法拖动地图,关于腾讯地图api的禁止地图拖动问题
  6. linux更改用户名_破旧安卓手机第二春,在安卓手机上使用Linux_deploy运行Linux
  7. 8086标志寄存器FLAG
  8. 8086加法指令ADD
  9. 160 - 37 CyberBlade.1
  10. 《Linux杂记:一》