信创国产化替换如何推动企业自主创新与市场竞争力提升
749
2022-08-28
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小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~