1、Java NIO 的通道类似流,但又有些不同:

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

  通道可以异步地读写。

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

2、Channel  的实现

这些是 Java NIO 中最重要的通道的实现:

  FileChannel

  DatagramChannel

  SocketChannel

  ServerSocketChannel

FileChannel 从文件中读写数据。

DatagramChannel 能通过 UDP 读写网络中的数据。

SocketChannel 能通过 TCP 读写网络中的数据。

ServerSocketChannel 可以监听新进来的 TCP 连接,像 Web 服务器那样。对每一个新进来的连接都会创建一个SocketChannel。

3、基本Channel示例:

Java Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
/**
* nio channel 读取数据到buffer示例
* Created by 321695 on 2016/11/8.
*/
public class FileChannelTest {
    public static void main(String[] args) {
        RandomAccessFile randomAccessFile = null;

try {
            //实例化randomAccessFile
            randomAccessFile = new RandomAccessFile("E:/Dubbox/dubbo/nio-demo/src/main/resources/linux.txt", "rw");

//获取文件传输通道实例
            FileChannel fileChannel = randomAccessFile.getChannel();

//创建一个容量为48字节的buffer
            ByteBuffer buffer = ByteBuffer.allocate(48);

//读取数据到buffer中
            int bytesRead = fileChannel.read(buffer);

while (bytesRead != -1) {

System.out.println("Read" + bytesRead);

//反转buffer
                buffer.flip();

//若buffer中还有元素,打印出来
                while (buffer.hasRemaining()) {
                    System.out.print((char) buffer.get());
                }

//清空buffer
                buffer.clear();

//继续处理未完成数据
                bytesRead = fileChannel.read(buffer);

}

//文件操作对象关闭
            randomAccessFile.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

二、Nio之Channel相关推荐

  1. Java NIO之Channel(通道)

    **Java高级特性增强-NIO 本部分网络上有大量的资源可以参考,在这里做了部分整理并做了部分勘误,感谢前辈的付出,每节文章末尾有引用列表~ 写在所有文字的前面:作者在此特别推荐Google排名第一 ...

  2. NIO 之 Channel

    可参考之前写过的文章:NIO 之 Channel实现原理 概述 通道( Channel)是 java.nio 的主要创新点.它们既不是一个扩展也不是一项增强,而是全新.极好的 Java I/O 示例, ...

  3. Netty导学之NIO,Channel、Buffer、Selector详解

    介绍 NIO可翻译为Non-Blocking IO非阻塞IO,也可以称其为New IO 因为其是JDK1.4新出现的. java中的流要么是输入流,要么是输出流,不可能都是,它面向流编程.而在NIO中 ...

  4. Java NIO 之Channel

    定义 用于源节点和目标节点之间的连接.nio中负责缓冲区中数据传输,Channel本地并不存储数据,而是配合缓冲区进行数据传输.你可以把它理解成io中的流. 结构(java.nio.channels. ...

  5. JAVA NIO - Buffer Channel

    2019独角兽企业重金招聘Python工程师标准>>> Buffer和Channel是NIO中的基本对象,凡是涉及到I/O的操作都都会用到Buffer和Channel. Channe ...

  6. 深入浅出NIO之Channel、Buffer

    2019独角兽企业重金招聘Python工程师标准>>> 前言 Java NIO 由以下几个核心部分组成: 1 .Buffer 2.Channel 3.Selector 传统的IO操作 ...

  7. 【Netty】NIO 通道 ( Channel ) 组件

    文章目录 I . 通道 ( Channel ) 概念简介 II . 通道 ( Channel ) 常用类 III . 常用的 通道 ( Channel ) 之 套接字通道 ( SocketChanne ...

  8. NIO 之 Channel实现原理

    相关文章 IO.NIO.AIO 内部原理分析 NIO 之 Selector实现原理 NIO 之 ByteBuffer实现原理 NIO概述 Java NIO 由以下几个核心部分组成: Channels ...

  9. 小师妹学JavaIO之:NIO中Channel的妙用

    文章目录 简介 Channel的分类 FileChannel Selector和Channel DatagramChannel SocketChannel ServerSocketChannel As ...

最新文章

  1. 开发者,只有被裁,没有退休
  2. VC 利用DLL共享区间在进程间共享数据及进程间广播消息
  3. 2019年1月29日
  4. IPhone 设备状态、闪光灯状态
  5. knime如何连接mysql_knime怎么连接MySQL?
  6. 通才和专家:如何选择
  7. 腾讯宣布五年5000亿投入计划,发力新基建(2020年5月)
  8. android button 图片不缩放,ImageButton如何让图片按比例缩放不被拉伸
  9. 在主函数中输入10个等长的字符串。用另一函数对他们排序
  10. 计算机组成原理笔记(一):概述
  11. 去掉flash player自带的fff新推荐广告插件
  12. c语言中的各种“零”
  13. 奇迹网站可视化排行榜]_外观可视化奇迹
  14. 2020-10-23 集合+序列化+递归+多线程+泛型+枚举+单例+反射小记
  15. python画k线_python画k线,python绘制动态k线及均线
  16. 爬取百度 《一人之下》 贴吧
  17. Integer装箱拆箱、参数传递
  18. Maven手工安装jar包到本地仓库
  19. linux ntp攻击python脚本,(转)如何发现 NTP 放大攻击漏洞
  20. 机器学习算法的效果评估和优化方法

热门文章

  1. Facial Expression Recognition based on a multi-task global-local network--论文笔记
  2. 从校招时间谈大学求职准备
  3. Tensorflow中的各种梯度处理gradient
  4. 戴尔电脑怎么录屏?这6个方法教你轻松录屏
  5. 安利几款win10小工具
  6. Matlab动态作图——animatedline函数
  7. 竞品分析:小宇宙APP——如何在播客领域站住脚?
  8. php微信公众号怎么开发_PHP对接微信公众平台消息接口开发流程详解及实例
  9. 从easyui页面导出excel
  10. BS EN 438-6装饰用板材外部用压实层压板材的分类和规范