JAVA-2NIO之Channel
注意:转载自并发编程网 – ifeve.com本文链接地址: Java NIO系列教程(二) Channel
Channel
Java NIO的通道类似流,但又有些不同:
- 既可以从通道中读取数据,又可以写数据到通道。但流的读写通常是单向的。
- 通道可以异步地读写。
- 通道中的数据总是要先读到一个Buffer,或者总是要从一个Buffer中写入。
正如上面所说,从通道读取数据到缓冲区,从缓冲区写入数据到通道。如下图所示:
一、Channel的实现
这些是Java NIO中最重要的通道的实现:
- FileChannel
- DatagramChannel
- SocketChannel
- ServerSocketChannel
FileChannel 从文件中读写数据。
DatagramChannel 能通过UDP读写网络中的数据。
SocketChannel 能通过TCP读写网络中的数据。
ServerSocketChannel可以监听新进来的TCP连接,像Web服务器那样。对每一个新进来的连接都会创建一个SocketChannel。
二、基本的 Channel 示例
下面是一个使用FileChannel读取数据到Buffer中的示例:
public class Channel1 {public static void main(String[] args) {try {RandomAccessFile raf = new RandomAccessFile("./.gitignore","rw");FileChannel channel = raf.getChannel(); //获取通道ByteBuffer bf = ByteBuffer.allocate(50); //通过静态allocate方法创建一个缓冲区,容量为50byte[] bytes = new byte[]{};bytes = "123".getBytes();bf = ByteBuffer.wrap(bytes); //通过静态wrap方法,byte数组生成缓冲区,缓冲区中保留了原数据while(bf.hasRemaining()){System.out.print((char) bf.get());}int bytesRead ;while ((bytesRead = channel.read(bf)) != -1) { //将通道中的数据写入缓冲区,并判断通道中的数据是否到末尾System.out.println("Read " + bytesRead);bf.flip(); //反转缓冲区 实际上就是将position置为0 后续buffer详细介绍while(bf.hasRemaining()){ //判断缓冲区中是否还有值System.out.print((char) bf.get()); //输出缓冲区中的值 }bf.clear(); //清理缓冲区 }raf.close(); //关闭RandomAccessFile} catch (IOException e) {e.printStackTrace();}} }
注意 buf.flip() 的调用,首先读取数据到Buffer,然后反转Buffer,接着再从Buffer中读取数据。下一节会深入讲解Buffer的更多细节
转载于:https://www.cnblogs.com/zhangxinly/p/6958570.html
JAVA-2NIO之Channel相关推荐
- Java NIO之Channel(通道)
**Java高级特性增强-NIO 本部分网络上有大量的资源可以参考,在这里做了部分整理并做了部分勘误,感谢前辈的付出,每节文章末尾有引用列表~ 写在所有文字的前面:作者在此特别推荐Google排名第一 ...
- Java NIO 之Channel
定义 用于源节点和目标节点之间的连接.nio中负责缓冲区中数据传输,Channel本地并不存储数据,而是配合缓冲区进行数据传输.你可以把它理解成io中的流. 结构(java.nio.channels. ...
- JAVA NIO - Buffer Channel
2019独角兽企业重金招聘Python工程师标准>>> Buffer和Channel是NIO中的基本对象,凡是涉及到I/O的操作都都会用到Buffer和Channel. Channe ...
- java之NIO(Channel,Buffer,Selector)
java之NIO 1 什么是NIO Java NIO (New IO,Non-Blocking IO)是从Java 1.4版本开始引入的一套新的IO API.NIO支持面向缓冲区的.基于通道的IO操作 ...
- fabric java sdk解析channel.queryTransactionByID(txId)方法的返回值
解析区块链上具体某一个块的内容,官方java sdk已经给出了解析案例,具体解析过程也可参考QueryHandler#queryBlockChain. 但是如果要根据交易ID(txId)查找交易信息, ...
- 内存双通道与Java中的Channel
双通道内存:指在北桥(又称之为MCH)芯片级里设计两个内存控制器,这两个内存控制器可相互独立工作,每个控制器控制一个内存通道,通过CPU可分别寻址.读取数据,从而使内存的带宽增加一倍,数据存取速度也相 ...
- java 通道 双向原理_Java-NIO(四):通道(Channel)的原理与获取
通道(Channel): 由java.nio.channels包定义的,Channel表示IO源与目标打开的连接,Channel类似于传统的"流",只不过Channel本身不能直接 ...
- Java NIO Channel
Java NIO 通道(Channel) Java NIO的Channel和流(Streams)很相似,但是也有一些区别: Channel是双向的,你可以从Channel中读取,也可以向Channel ...
- Java NIO学习篇之通道Channel详解
定义: Channel:通道,运输的介质,可以大致比喻成铁路的铁轨,连接着两个车站,而channel用于打开与IO设备的连接,比如磁盘,套接字等. 通道使用完需要关闭. 与传统IO的Stream比较: ...
- java文件读写之Channel策略
概述 本篇博客向大家介绍的是如何运用java中的Channel进行文件读写,也就是说明如何通过Channel将字符串写到文件中,以及怎么把文件中的内容以字符串的形式读出来.具体地,我会介绍关于Chan ...
最新文章
- 你已经是个成熟的表格,该学会NLP了
- python单词意思-Python这个单词是什么含义??????????????
- linux系统如何安装其他包,Linux系统下如何安装软件包
- html dom节点源码,JavaScript操作HTML DOM节点的基础教程
- CRM Fiori应用 Appointment的close date字段
- 参加 JSConf China 2019 是怎样的体验?VS Code 和 TypeScript 都很火
- oracle 查看动态性能视图,oracle常用动态性能视图
- html中的各种协议,html 中使用 wtai 协议
- 网络中的那些事儿(一)之神奇的通讯
- Excel不好吗?为什么非要用Python做数据分析
- loadrunner11中文版破解文档+录制脚本(图/文)
- 如何查看Python源代码
- 毕业设计之---基于java web的停车管理系统
- 预充电电路工作原理_电动汽车电控系统预充电原理
- PicGo配置阿里云OSS
- 全国天气预报信息数据接口 API
- 嗨,程序员,你知道高级工程师用的搜索引擎吗?
- PHP——get和post请求他人接口
- java计算机毕业设计慧学IT精品课程网站MyBatis+系统+LW文档+源码+调试部署
- vm虚拟机装2019最新kali系统