Java NIO系列教程(二) Channel
为什么80%的码农都做不了架构师?>>>
Java NIO的通道类似流,但又有些不同:
既可以从通道中读取数据,又可以写数据到通道。但流的读写通常是单向的。
通道可以异步地读写。
通道中的数据总是要先读到一个Buffer,或者总是要从一个Buffer中写入。
正如上面所说,从通道读取数据到缓冲区,从缓冲区写入数据到通道。如下图所示:
Channel的实现
这些是Java NIO中最重要的通道的实现:
FileChannel
DatagramChannel
SocketChannel
ServerSocketChannel
FileChannel 从文件中读写数据。
DatagramChannel 能通过UDP读写网络中的数据。
SocketChannel 能通过TCP读写网络中的数据。
ServerSocketChannel可以监听新进来的TCP连接,像Web服务器那样。对每一个新进来的连接都会创建一个SocketChannel。
基本的 Channel 示例
下面是一个使用FileChannel读取数据到Buffer中的示例:
import java.io.IOException;
import java.io.RandomAccessFile;
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
public class T {
public static void main(String[] args) throws IOException {
RandomAccessFile aFile = new RandomAccessFile("test.dat", "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中读取数据。下一节会深入讲解Buffer的更多细节。
转载于:https://my.oschina.net/kepler/blog/202237
Java NIO系列教程(二) Channel相关推荐
- 转:Java NIO系列教程(二) Channel
Java NIO的通道类似流,但又有些不同: 既可以从通道中读取数据,又可以写数据到通道.但流的读写通常是单向的. 通道可以异步地读写. 通道中的数据总是要先读到一个Buffer,或者总是要从一个Bu ...
- Java NIO系列教程(十二) Java NIO与IO
原文地址:http://tutorials.jenkov.com/java-nio/nio-vs-io.html 作者:Jakob Jenkov 译者:郭蕾 校对:方腾飞 当学习了Java ...
- Java NIO系列教程(三) Buffer
2019独角兽企业重金招聘Python工程师标准>>> Java NIO中的Buffer用于和NIO通道进行交互.如你所知,数据是从通道读入缓冲区,从缓冲区写入到通道中的. 缓冲区本 ...
- Java NIO系列教程(五) 通道之间的数据传输
在Java NIO中,如果两个通道中有一个是FileChannel,那你可以直接将数据从一个channel(译者注:channel中文常译作通道)传输到另外一个channel. transferFro ...
- Java NIO系列教程(四) Scatter/Gather
转载自 Java NIO系列教程(四) Scatter/Gather 译文地址 作者:Jakob Jenkov 译者:郭蕾 Java NIO开始支持scatter/gather,scatte ...
- Java NIO系列教程(十) Java NIO DatagramChannel
转载自 Java NIO系列教程(十) Java NIO DatagramChannel 译文链接 作者:Jakob Jenkov 译者:郑玉婷 校对:丁一 Java NIO中的 ...
- Java NIO系列教程(十一) Pipe
转载自 Java NIO系列教程(十一) Pipe 原文链接 作者:Jakob Jenkov 译者:黄忠 校对:丁一 Java NIO 管道是2个线程之间的单向数据连接. ...
- Java NIO系列教程(十 五)Java NIO Path
转载自 Java NIO系列教程(十 五)Java NIO Path 译文链接 译者:章筱虎 Java的Path接口是Java NIO2 的一部分,是对Java6 和Java7的 NIO的更新.J ...
- Java NIO系列教程(一) Java NIO 概述
一.阻塞IO与非阻塞IO 阻塞IO: 通常在进行同步I/O操作时,如果读取数据,代码会阻塞直至有 可供读取的数据.同样,写入调用将会阻塞直至数据能够写入.传统的Server/Client模式会基于TP ...
最新文章
- linux shell IFS分隔符 简介 IFS=$‘\n‘ 使用换行符做分隔符
- 【C 语言】文件操作 ( 配置文件读写 | 框架搭建 | 写出或更新配置文件 | 读取配置文件 )
- 分布式文件系统研究-搭建图片服务虚拟主机
- Kafka发送超过broker限定大小的消息时Client和Broker端各自会有什么异常?
- php3源码分析,ThinkPHP3.1.3源码分析(一) 入口文件分析
- 操作系统--用户级线程和内核级线程
- springmvc 带查询条件的分页,form的控制范围,怎么包裹条件提交给后台
- c4d序列号_(图文+视频)野分享:手把手教你免费获取Megascans所有资产并应用于C4D...
- java程序设计任务驱动实训教程上海交通大学出版社_清华大学出版社-图书详情-《Java程序设计任务驱动教程》...
- [LoadRunner]LR11安装或破解时报错的解决方法
- 如何用手机实现高精度定位导航
- bilibili手机缓存视频转换为mp4
- 用树莓派DIY便携式警报器
- 单片机——A/D数模转换篇
- 微信小程序 诡异的异步调用问题,函数执行结果与预想不一致
- Cesium实战记录(八)三维风场+风速热力图(水平+垂直)
- Apache Zeppelin 简单介绍,以及下载地址
- Mesh(802.11s)组网 — 基于OpenWRT路由器
- 测试工具和测试自动化
- 电脑待机服务器没有响应,电脑和服务器的CPU的uncore待机功耗显示异常的问题
热门文章
- css布局中的居中问题
- 二叉树简介及C++实现
- Linux下多线程编程互斥锁和条件变量的简单使用
- 5个java框架及其优缺点_各种Java Web框架的优缺点是什么?
- bootstrap 时间线_股票配资均量线的实战用法绝技是什么?怎么用它判断买卖点?...
- python函数编程求三个数的最小公倍数_Python求三个数的最小公倍数
- Redis初学:2(Redis的启动)
- echart x轴标签偏移_移动端H5页面滑动手势X轴实例
- 【java】兴唐第二十九节课作业
- mac tomcat https