Netty 入门篇 Day 1---NIO

网友投稿 749 2022-08-28

Netty 入门篇 Day 1---NIO

Netty 入门篇 Day 1---NIO

一、NIO基础

Netty 入门篇 Day 1

​​一、NIO基础​​

​​1.三大组件​​

​​1.1 Channel 通道​​​​1.2 Buffer 缓冲区​​​​1.3 Selector 选择器​​

​​2.第一个示例​​​​3.ByteBuffer的使用步骤​​

​​结语​​

NIO全称non-blocking IO (非阻塞IO) New 新IO是指JDK1.4+提供的一个新的API(新IO),为所有原始数据(除boolean类型以外)提供缓存支持的 数据容器,可以对数据进行读和写操作。

1.三大组件

1.1 Channel 通道

channel通道,可以通过它 读取和写入数据。 类似于 传统IO中的 stream流。# 区别:1> 传统IO中的steam流 是单向的(InputStream 输入流 或 OutputStream 输出流)2> channel是读写数据的双向通道。可以从channel中把数据读到buffer中;也可以把buffer中的数据定入channel

常见的channel有:

FileChannel 用于对文件操作的channel

DatagramChannel UDP网络编程时使用的channer

SocketChannel TCP网络编程时使用的通道,可用于server端和client端

ServerSocketChannel TCP网络编程时使用的通道,专用于server端

1.2 Buffer 缓冲区

Buffer缓冲区,用于 缓冲读或写的数据。是一个固定数据量的数据容器。常见的缓冲区有:ByteBuffer 以字节为单位的缓冲区ShortBuffer short为单位IntBuffer int为单位LongBuffer long为单位FloatBuffer float为单位DoubleBuffer double为单位CharBuffer char为单位

1.3 Selector 选择器

Selector 选择器,用于 对NIO中的多个channel进行检查和选择的,检查多个channel实例 哪些已经准备好进行读写操作了,通过选择器 选择对应的channel进行数据操作。

服务器的工作方式:

1> 多线程的方式

2> 线程池的方式

3> selector的方式

2.第一个示例

步骤1> 准备一个.txt文件(e:\\data.txt),并输入简单的字符内容 1234567890hello步骤2> NIO的第一个示例public class First { public static void main(String[] args) throws IOException { // 创建FileChannel对象 FileChannel channel = new FileInputStream("e:\\data.txt").getChannel(); // 分配缓冲区内存 ByteBuffer buffer = ByteBuffer.allocate(10); // 默认写操作 // 取文件 while (true){ // 使用channel读数据,存入buffer int len = channel.read(buffer); //返回-1代表文件读取结束 System.out.println("实际读到的字节数: " + len); if (len == -1) {// 检查 是否读取到文件结尾 break; } // 显示buffer中的内容 读到了文件的正常内容,文件还没到结尾 buffer.flip(); // 切换buffer为 读模式 while (buffer.hasRemaining()){ // 判断buffer中是否有未读的内容 byte b = buffer.get(); // 读取buffer区中的内容 System.out.println("读到的内容:" + (char)b); } buffer.clear(); // 切换buffer为 写模式 } }}

3.ByteBuffer的使用步骤

1> 往buffer中写数据,可以通过 channel.read(buffer)2> 切换buffer为 读模式, 通过 buffer.flip()3> 从buffer中读取数据, 调用buffer.get()4> 切换buffer为 写模式, 通过 buffer.clear() 或 buffer.compact()

结语

如果这篇文章对您有所帮助,或者有所启发的话,求一键三连:点赞、评论、收藏➕关注,您的支持是我坚持写作最大的动力。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:新手入门计算机编程,这些笔记值得一看(“计算机编程入门”)
下一篇:Netty 入门篇 Day 2---ByteBuffer
相关文章

 发表评论

暂时没有评论,来抢沙发吧~