Java NIO系列课程(2):Channel
Java NIO系列教程(2):Channel
英文:Jakob Jenkov
译文:airu
链接:http://ifeve.com/channels/
Java NIO的通道类似流,但又有些不同:
-
既可以从通道中读取数据,又可以写数据到通道。但流的读写通常是单向的。
-
通道可以异步地读写。
-
通道中的数据总是要先读到一个Buffer,或者总是要从一个Buffer中写入。
正如上面所说,从通道读取数据到缓冲区,从缓冲区写入数据到通道。如下图所示:
Channel的实现
这些是Java NIO中最重要的通道的实现:
-
FileChannel
-
DatagramChannel
-
SocketChannel
-
ServerSocketChannel
FileChannel 从文件中读写数据。
DatagramChannel 能通过UDP读写网络中的数据。
SocketChannel 能通过TCP读写网络中的数据。
ServerSocketChannel可以监听新进来的TCP连接,像Web服务器那样。对每一个新进来的连接都会创建一个SocketChannel。
基本的 Channel 示例
下面是一个使用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() 的调用,首先读取数据到Buffer,然后反转Buffer,接着再从Buffer中读取数据。
相关推荐
- java nio channel
- Android快速开发系列 10个常用工具类 1、日志工具类L.java 2、Toast统一管理类 3、SharedPreferences封装类SPUtils 4、单位转换类 DensityUtils 5、SD卡相关辅助类 SDCardUtils 6、屏幕相关辅助类 ScreenUtils 7、App相关辅助类 8、软键盘相关辅助类KeyBoardUtils 9、网络相关辅助类 NetUtils 10、Http相关辅助类 HttpUtils
- JAVA课程设计个人博客 学生基本信息管理 201521123117 李心宇 1. 团队课程设计博客链接 2.个人负责模块或任务说明 3.自己的代码提交记录截图 4.自己负责模块或任务详细说明 5.课程设计感想
- Java NIO2 File API介绍 Introduction to the Java NIO2 File API
- Java 课程设计 "Give it up"小游戏设计(个人) 201521123077 1.团队课程设计博客链接 2.个人负责模块或任务说明 3.自己的代码提交记录截图 4.自己负责模块或任务详细说明 5、课程设计感想
- Java NIO 系列教程
- JAVA NIO系列(四) 选择器
- 本人博客导航 深度学习实践系列之--身份证上汉字及数字识别系统的实现(下) 深度学习实践系列之--身份证上汉字及数字识别系统的实现(上) 解决编译caffe2遇到的坑 Caffe学习系列(四)之--训练自己的模型 Caffe学习系列(三)Docker安装及一些问题的记录 Caffe学习系列(二)Caffe代码结构梳理,及相关知识点归纳 Caffe学习系列(一)Ubuntu16.04下搭建编译Caffe环境,并运行MNIST示例(仅CPU) JDBC数据源(DataSource)的简单实现 关于链表的学习 BigInteger和BigDecimal的练习 android开发之在activity中控制另一个activity的UI更新 android客户端登录&注册的实现 Android开发--多线程之Handler 后端开发--之文件上传 VMware下ubuntu与Windows实现文件共享的方法 nginx在CentOs下的安装及配置 CentOs下安装PHP环境的步骤 Linux服务器下Java
- 【Web API系列课程】2.3 — ASP.NET Web API 2中的属性路由
- 【Web API系列课程】1.2 — Web API 2中的Action Results
- JavaScript类跟继承:constructor属性
- 应用SuperIO(SIO)跟开源跨平台物联网框架ServerSuperIO(SSIO)构建系统的整体方案