Java NIO Channel
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相关推荐
- 03. Java NIO Channel 通道
2019独角兽企业重金招聘Python工程师标准>>> Java NIO Channel通道和流非常相似,主要有以下几点区别: 通道可以度也可以写,流一般来说是单向的(只能读或者写) ...
- 二、Java NIO Channel
一.Java NIO 网络编程 二.Java NIO Channel 三.Java NIO Buffer 四.Java NIO Selector 五.Java NIO 扩展组件 一.Channel 概 ...
- java nio channel原理_Java NIO 选择器(Selector)与通道(Channel) 原理 | 学步园
NIO底层实现poll, epoll(jdk1.5update 9 和jdk1.6 仅限于 linux 2.6以上 ) Java NIO 选择器(Selector) 知识预备 (linux epo ...
- Java NIO之Channel(通道)
**Java高级特性增强-NIO 本部分网络上有大量的资源可以参考,在这里做了部分整理并做了部分勘误,感谢前辈的付出,每节文章末尾有引用列表~ 写在所有文字的前面:作者在此特别推荐Google排名第一 ...
- JAVA NIO之文件通道
1.简介 通道是 Java NIO 的核心内容之一,在使用上,通道需和缓存类(ByteBuffer)配合完成读写等操作.与传统的流式 IO 中数据单向流动不同,通道中的数据可以双向流动.通道既可以读, ...
- 我所理解的Java NIO
这两天了解了一下关于NIO方面的知识,网上关于这一块的介绍只是介绍了一下基本用法,没有系统的解释NIO与阻塞.非阻塞.同步.异步之间的联系,导致自己困扰了好久.本篇文章就个人关于NIO的理解进行阐述. ...
- Java NIO学习
概述 NIO是一种基于缓存的.非阻塞的异步IO.NIO主要涉及到三个概念:Buffer(缓存),Channel(通道),Selector(选择器).NIO和传统IO不同在于:NIO是基于缓存的,而传统 ...
- Java NIO Introduction
2019独角兽企业重金招聘Python工程师标准>>> Java NIO (New IO) is an alternative IO API for Java (from Java ...
- 海纳百川而来的一篇相当全面的Java NIO教程
目录 零.NIO包 一.Java NIO Channel通道 Channel的实现(Channel Implementations) Channel的基础示例(Basic Channel Exampl ...
最新文章
- C# 中的eval ()函数
- 如何将页脚固定在页面底部
- 怎么查看Beyond Compare所有会话日志消息
- xunit-ICollectionFixture
- 掘金外链即将失效?论如何用脚本一次性下载/替换失效的外链图片
- java垃圾收集器zgc_java虚拟机ZGC垃圾收集器的实现方法
- ESXi vSphere Client中copy paste如何启用
- 计算机原理课 如何在中小学课堂中变成有趣,在课堂中如何发挥电教辅助教学优势...
- 算法竞赛进阶指南 pdf_限时!字节跳动大牛2个月标星达70k的算法笔记,免费开源...
- 了解uni-app只需这一篇就足够了
- Beyond Compare 4 “授权秘钥已被吊销“ 的解决办法
- 深度学习在文本分类中的应用
- related knowledge points about protein
- 菜鸟学习 - Unity中的热更新 - Lua和C#通信
- 英文阅读积累 - 2019年4月
- Python发送邮件(demo)
- kali 中 嗅探工具 如何分类
- bootstrap X-editable使用。
- Linux设备模型剖析系列之二(uevent、sysfs)
- 计算机电源可调电阻,PC电源改可调电源
热门文章
- JSON学习资料整理
- 神话人物的现代版简历
- python运行结果图_[宜配屋]听图阁
- 华为5720设置静态路由不通_【干货分享】交换机与路由器在环路中的处理机制了解一下!...
- html 手机端无法拖动地图,关于腾讯地图api的禁止地图拖动问题
- linux更改用户名_破旧安卓手机第二春,在安卓手机上使用Linux_deploy运行Linux
- 8086标志寄存器FLAG
- 8086加法指令ADD
- 160 - 37 CyberBlade.1
- 《Linux杂记:一》