NIO& 网络通信 详解

本文详细介绍了Java NIO的网络通信,包括Channel、Buffer、Selector等核心概念,以及模拟UDP和TCP通信的过程。讲解了NIO与IO的区别,如面向缓冲区、非阻塞式和选择器机制,并提供了具体的代码示例。
摘要由CSDN通过智能技术生成

NIO 网络通信

NIO

概念理解:

1.送什么货物:FileInputStream fis = new FileInputStream(“C:\reset.css”);
2.货物送到哪里:FileOutputStream fos = new FileOutputStream(“D:\reset.css”);
3.需要接收货物的快递员:FileChannel fisChannel = fis.getChannel();
4.到达目的城市需要快递员送到手里:FileChannel fosChannel = fos.getChannel();
5.需要车辆来承载这些货物。定义这个车能装多少货物:ByteBuffer buffer = ByteBuffer.allocate(1024);
6.执行需要的元素,每次送完一车那么把车标为空车:buffer.flip();

核心部分组成:

1.Channels:通道  Buffer:缓冲区 Selectors :选择器

2.Channels和Buffer是新IO中的两个核心对象,Channel是对传统的输入/输出系统的模拟,在新IO系统中所有的数据都需要通过通道传输。
3.Channels与传统的InputStream,OutputStrem最大的区别在于它提供了一个map()方法,通过该map()方法可以直接将"一块数据"映射到内存中,如果说传统的输入/输出系统是面向流处理,则新IO则是面向块的处理
4.Buffer可以被理解为一个容器(缓冲区,数组),发送到Channel中的所有对象都必须首先放到Buffer中,而从Channel中读取的数据也必须放到Buffer中,也就是说数据可以从Channel读取到Buffer中,也可以从Buffer写到Channel中
5.使用Buffer:Buffer就像一个数组,它可以保存多个类型相同的数据,Buffer是一个抽象类其最常用的是ByteBuffer,它可以在底层字节数组上进行get/set操作,除了ByteBuffer之外,对应于其他基本的数据类型都有相应的Buffer类

NIO于IO的区别:

1.IO面向流,NIO面向缓冲区:—IO面向流意味着每次从流中读取一个或多个字节,直至读取所有字节,他们没有被缓存在任何地方。此外,它不能前后移动流中的数据,如果需要前后移动流中的数据,需要将它缓存到一个缓冲区;NIO的缓冲导向方法略有不同,数据读取到一个它稍后处理的缓冲区,需要时可在缓冲区中前后移动。这就增加了处理过程中的灵活性。

2.IO是阻塞式的,NIO由非阻塞式的:—Java IO的各种流是阻塞的。这意味着,当一个线程调用read() 或 write()时,该线程被阻塞,直到有一些数据被读取,或数据完全写入。该线程在此期间不能再干任何事情了。Java NIO的非阻塞模式,使一个线程从某通道发送请求读取数据,但是它仅能得到目前可用的数据,如果目前没有数据可用时,就什么都不会获取,而不是保持线程阻塞,所以直至数据变的可以读取之前,该线程可以继续做其他的事情。 非阻塞写也是如此。

3.IO没有选择器,NIO有选择器ÿ

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值