Java NIO channels

Java 中的channel和流有如下的区别

既可以从通道中读取数据,又可以写数据到通道。但流的读写通常是单向的。

通道可以异步地读写。

通道中的数据总是要先读到一个Buffer,或者总是要从一个Buffer中写入。

正如上面所说,从通道读取数据到缓冲区,从缓冲区写入数据到通道。如下图所示:

image

Java NIO: Channels read data into Buffers, and Buffers write data into Channels

Channel 的实现

下面是channel的重要的实现

FileChannel

DatagramChannel

SocketChannel

ServerSocketChannel

FileChannel是从file中读取或者是写入到file中去

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中读取数据。下一节会深入讲解Buffer的更多细节。

channels java_Java NIO channels相关推荐

  1. channels java_java.nio.channels.overlappingfilelockexception 怎么解决

    展开全部 可能是环境变量配置错误,接下来就来介绍解决办法. 延展阅读: 1.首62616964757a686964616fe78988e69d8331333365646263先打开我们的开发工具mye ...

  2. sparkStreaming+kafka SparkException: java.nio.channels.ClosedChannelException异常报错

    在运行sparkStreaming+kafka的时候报错 java io报错, 如果broker-list的端口不对或者kafka服务端未启动,会遇到以下错误: Exception in thread ...

  3. 【Hadoop】java.io.IOException: Failed on local exception: java.nio.channels.ClosedByInterruptException

    查看日志中的报错信息如下: java.io.IOException: Failed on local exception: java.nio.channels.ClosedByInterruptExc ...

  4. java.nio.channels.UnresolvedAddressException

    RocketMq和Redis的netty版本冲突 报错信息如下 排查原因 解决办法 分析 报错信息如下 java.nio.channels.UnresolvedAddressException - U ...

  5. java.nio.channels.UnresolvedAddressException: null [运行storm-0.9.4集群时]

    [问题描述] 在运行storm集群时,发现kafkaspout不能消费kafka的数据,查看stormUI,没有发现有什么异常,但是手动消费kafka的数据又是正确的,通过一步一步问题排查,最好定位到 ...

  6. Spark2 Failed to send RPC 5346982634 to /ns1:58312: java.nio.channels.ClosedChannelException

    将spark任务运行与yarn上出现以下错误: scala> 18/11/21 16:20:11 ERROR cluster.YarnClientSchedulerBackend: Yarn a ...

  7. nio的应用 java_Java NIO的理解和应用

    Java NIO是一种基于通道和缓冲区的I/O方式,已经被广泛的应用,成为解决高并发与大量连接和I/O处理问题的有效方式. Java NIO相关组件 Java NIO主要有三个核心部分组成,分别是:C ...

  8. 【NIO】解读 java.nio.channels.Selector

    目录 Part 1. What's Selector? Part 2. Why Selector? Part 3. How to use Selector? 1) Create Selector 2) ...

  9. Netty 中 IOException: Connection reset by peer 与 java.nio.channels.ClosedChannelException: null

    最近发现系统中出现了很多 IOException: Connection reset by peer 与 ClosedChannelException: null 深入看了看代码, 做了些测试, 发现 ...

最新文章

  1. nodejs安装及环境配置(windows系统)
  2. Spring Boot 配置文件密码加密方法
  3. ip地址个数的计算,二进制与 8 比特
  4. tea 加密密钥生成_加密密钥生成需要的是熵的良好来源
  5. c语言程序基本设计,C语言程序的设计基本6.ppt
  6. 基于springboot vue h5 手机商城源码
  7. CSDN日报20170612 ——《程序员,感觉技术停滞了怎么办?》
  8. B+树索引实战:全值匹配查询
  9. PLC1200 模拟量采集
  10. Xmind 8 pro 软件破解版
  11. 这篇文章记录平时学习、项目中遇到的问题(未解决的居多)
  12. 石墨文档支持的几种markdown格式
  13. matplotlib之pyplot模块之标题(title()和suptitle())
  14. 《古月ROS探索总结》学习笔记2
  15. 华为2015年实习招聘机试
  16. zr 10联测 day1
  17. win7你没有权限查看或编辑这个对象的权限设置
  18. 歌星大奖赛,评分系统
  19. Linux - 内存管理
  20. 1027: 判断水仙花数 Java

热门文章

  1. 用9*9的卷积核分类9*9的图片
  2. 用反向传导分子模型去计算基团的定位效应
  3. ado批量执行sql mysql_C++ 使用 ADO 批量操作数据库
  4. 【STM32】PWM 输出实验代码详解
  5. 【数理知识】《矩阵论》方保镕老师-第4章-赋范线性空间与矩阵范数
  6. 【Matlab 控制】矩阵、图像操作基础
  7. C++改变基类成员在派生类中的访问属性
  8. Swift UITableView嵌套UICollectionView点击事件冲突(点击事件穿透)
  9. Android 中文 API (19) —— TwoLineListItem
  10. Linux下安装配置NTP时间同步服务器