太阳能灯网站建设珠海医疗网站建设公司

张小明 2026/1/16 9:44:27
太阳能灯网站建设,珠海医疗网站建设公司,平凉北京网站建设,中铁建设集团招聘官网在Java 中#xff0c;IO#xff08;input/output#xff09;和 NIO(new Input/output) 是两种不同的输入输出处理机制。它们各自有不同的设计理念和使用场景#xff0c;理解这两者的区别对于优化性能、提高应用的响应速度非常重要。 一、IO#xff08;传统输入输出#…在Java 中IOinput/output和 NIO(new Input/output) 是两种不同的输入输出处理机制。它们各自有不同的设计理念和使用场景理解这两者的区别对于优化性能、提高应用的响应速度非常重要。一、IO传统输入输出IO是java最早的输入输出方式通过流Stream来读写数据。主要包括字节流和字符流。通过阻塞式的操作来实现数据的读写。1、特点阻塞式Blocking:每次调用读写操作时线程会被阻塞直到数据完全读取或写入。也就是说io操作会让线程一直等待知道数据准备好。同步每个线程只能处理一个连接不能同时处理多个客户端请求。需要多个线程来同时处理多个IO操作。易于使用传统IO库简单直观适合小型应用或数据量较小的场景。数据流模型基于流模型数据按顺序从源流传输到目标流。2、主要类inputStream 和 outputStream字节流reader 和 writer:字符流3、示例// 读取文件内容FileInputStreamfisnewFileInputStream(file.txt);intdata;while((datafis.read())!-1){System.out.print((char)data);}fis.close();二、NIOnew input/outputNIO 是 Java 在 JDK 1.4 中引入的新的 IO 库相较于传统 IO它提供了非阻塞式的 I/O 操作。NIO 使用 通道Channel 和 缓冲区Buffer 来进行数据的读写。1、特点非阻塞式Non-blockingNIO 通过Selector选择器和Channel通道)来支持非阻塞I/O操作。允许线程在等待数据时做其他事情一个线程可以处理多个通道上的I/O操作。异步非阻塞I/O操作使得程序能够在等待I/O操作完成的同时继续执行其他任务从而提高了系统性能。支持大文件和高并发NIO更适合处理大量数据和高并发请求。NIO 是 Java 在 JDK 1.4 中引入的新的 IO 库相较于传统 IO它提供了非阻塞式的 I/O 操作。NIO 使用 通道Channel 和 缓冲区Buffer 来进行数据的读写。基于事件驱动NIO 通过 Selector 机制监听多个通道上的事件可以让一个线程管理多个 I/O 操作。2、主要类Channel通道可以用来读写数据常见的通道类有 FileChannel、SocketChannel、DatagramChannel 等。Buffer缓冲区数据的读写都发生在缓冲区中通过 ByteBuffer、CharBuffer 等类来管理数据。Selector选择器通过选择器一个线程可以管理多个通道的 I/O 操作。3、示例// 使用 NIO 读取文件内容PathpathPaths.get(file.txt);CharsetcharsetCharset.forName(UTF-8);try(BufferedReaderreaderFiles.newBufferedReader(path,charset)){Stringline;while((linereader.readLine())!null){System.out.println(line);}}三、IO 和 NIO 的区别特点IONIO阻塞/非阻塞阻塞式读写时会阻塞当前线程非阻塞式线程可以在等待 I/O 时继续做其他工作模型基于流Stream的模型基于通道Channel和缓冲区Buffer模型适用场景适用于少量数据或简单应用适用于大规模数据、高并发、长时间连接等场景多线程支持每个线程处理一个 I/O 操作需要多个线程处理多个请求一个线程可以处理多个通道上的 I/O 操作数据读取方式按顺序读取通过流逐字节或逐行处理数据数据通过缓冲区Buffer批量读取和写入使用难度简单易用学习曲线较低相对复杂学习曲线较高需要理解缓冲区、选择器等概念性能在高并发场景下性能较低高性能尤其适用于高并发、大文件处理等场景四、NIO 中通道和选择器的概念一、通道Channel通道 是 NIO 中用于数据传输的主要组件。它类似于传统 I/O 中的流但在设计上更为灵活和高效。通道是双向的即可以同时进行读取和写入操作。1️⃣通道的概念通道Channel代表了连接 I/O 操作的媒介。你可以通过通道来执行读取和写入操作通道本身并不直接存储数据而是通过缓冲区Buffer来与数据交互。2️⃣通道的主要类型NIO 中的通道有多种类型常见的有FileChannel用于文件 I/O 操作提供文件的读取和写入功能。示例用于读取文件中的字节或将数据写入文件。SocketChannel用于网络 I/O 操作通过 TCP 协议与远程计算机进行通信。示例用于客户端与服务器之间的数据传输。DatagramChannel用于通过 UDP 协议进行网络 I/O 操作。示例用于实时性要求较高的通信像 DNS 查询、VoIP语音通信等。ServerSocketChannel用于服务器端监听并接受客户端连接请求。示例用来实现一个基于 NIO 的服务器。3️⃣通道的基本操作通道的基本操作包括 读 和 写但是通道本身并不直接处理数据它通过 缓冲区Buffer 来执行数据的存储和传输。读取数据read() 方法会把数据从通道中读取到缓冲区。写入数据write() 方法会把缓冲区中的数据写入到通道中。// 示例使用 FileChannel 读取文件FileChannelchannelnewFileInputStream(file.txt).getChannel();ByteBufferbufferByteBuffer.allocate(1024);intbytesReadchannel.read(buffer);// 读取文件内容到缓冲区4️⃣ 通道与流的区别流Stream一次只能操作一个方向的数据传输只能读取或写入。通道Channel可以双向操作数据既能读也能写。二、选择器Selector选择器 是 NIO 中用于实现多路复用Multiplexing的核心组件。它允许一个线程同时管理多个通道Channel并能够处理多个 I/O 操作而不需要为每个通道创建独立的线程。1️⃣选择器的概念选择器Selector是一个多路复用器用于检查多个通道的状态。通过选择器线程可以监控多个通道上的事件如是否可读、可写、连接已完成等当事件发生时线程才会处理这些通道上的操作。2️⃣选择器的工作流程注册通道将通道注册到选择器并指定感兴趣的事件如 OP_READ、OP_WRITE、OP_CONNECT 等。轮询事件选择器不断轮询各个注册的通道检查它们的状态若某个通道准备好进行 I/O 操作如数据可以读取或写入就会将该通道加入到已选择的通道列表中。处理 I/O 操作当事件发生时线程可以对该通道执行相应的 I/O 操作。3️⃣选择器的核心方法open()创建一个新的选择器。select()阻塞并等待通道事件的发生返回就绪的通道数。selectedKeys()返回一个包含已就绪通道的集合可以通过它来遍历就绪的通道并进行操作。// 示例使用 Selector 监听通道事件SelectorselectorSelector.open();ServerSocketChannelserverChannelServerSocketChannel.open();serverChannel.configureBlocking(false);// 设置为非阻塞模式serverChannel.register(selector,SelectionKey.OP_ACCEPT);while(true){selector.select();// 阻塞直到有事件发生SetSelectionKeyselectedKeysselector.selectedKeys();for(SelectionKeykey:selectedKeys){if(key.isAcceptable()){// 处理连接请求}elseif(key.isReadable()){// 处理读取事件}selectedKeys.remove(key);}}4️⃣选择器的事件类型OP_READ通道可读数据可以从通道读取。OP_WRITE通道可写数据可以写入通道。OP_CONNECT连接已经建立。OP_ACCEPT服务器端通道准备好接受新的客户端连接。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

临安市规划建设局网站宁夏电建网站

高校科研项目推荐:基于TensorRT的高效实验平台 在人工智能课程设计或研究生课题中,你是否遇到过这样的场景?——模型在实验室服务器上训练得漂漂亮亮,准确率高达95%,可一旦部署到Jetson Nano或者嵌入式终端&#xff0c…

张小明 2026/1/12 21:26:59 网站建设

做网站 设备网站建设与运营在线考试

✅作者简介:热爱科研的Matlab仿真开发者,擅长数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。 🍎 往期回顾关注个人主页:Matlab科研工作室 🍊个人信条:格物致知,完整Matlab代码获取及仿…

张小明 2026/1/12 22:37:02 网站建设

做网站需要多少钱 都包括什么做网站是什么意思

Knowledge-Grab是一款专为教师和学生设计的桌面应用程序,能够快速批量获取国家中小学智慧教育平台的各类教育资源。这款基于Tauri和Vue 3开发的开源工具,让优质教育资源的获取变得前所未有的简单高效。 【免费下载链接】knowledge-grab knowledge-grab 是…

张小明 2026/1/12 23:18:27 网站建设

网站app生成器下载王烨烨

在当今快速迭代的软件开发环境中,有效的测试生命周期管理已成为保障产品质量、控制项目风险的关键环节。本文从测试从业者的实际工作场景出发,系统阐述测试生命周期各阶段的组织方法、技术实践与协作机制,帮助团队建立可持续改进的质量保障体…

张小明 2026/1/13 3:06:29 网站建设

淘客免费网站建设创建网站的目的

一、BDD核心价值与测试工程师角色 行为驱动开发(BDD)通过自然语言描述系统行为,搭建业务人员与技术团队的沟通桥梁。对于测试从业者,BDD带来三重价值: 需求可视化:Gherkin语法将需求转化为可执行用例 自动…

张小明 2026/1/13 4:31:24 网站建设