Java之NIO

合肥-NIO蔚来汽车JAVA开发 面试一面电话二面视频(需要写代码)视频一视频二视频三 一面电话 时长:30分钟 实际:25分钟的样子 难度:一般 Nacos注册中心原理 从raft选举到pull、push整个流程 Dubbo调用原理 首先跟面试官说了dubbo怎么把服务注册到nacos中,再到从nacos中获取注册服务列表,调用的几种方式和负载均衡算法 Dubbo中3个消费者、4个提供者共建立了多少个连接 这个题回答了好久,主要是前面问了nacos,还以为dubbo跟nacos建立了多少链接,后面面试官说消费者和提供 阅读详情

java.nio全称java non-blocking IO(实际上是 new io),是指jdk1.4 及以上版本里提供的新api(New IO) ,为所有的原始类型(boolean类型除外)提供缓存支持的数据容器,使用它可以提供非阻塞式的高伸缩性网络。
NIO是为了弥补IO操作的不足而诞生的,NIO的一些新特性有:非阻塞I/O,选择器,缓冲以及管道。管道(Channel),缓冲(Buffer) ,选择器( Selector)是其主要特征。

  • Selector:选择器用于监听多个通道的事件。使用传统的阻塞IO时我们可以方便的知道什么时候可以进行读写,而使用非阻塞通道,我们需要一些方法来知道什么时候通道准备好了,选择器正是为这个需要而诞生的。

NIO和IO的区别

  • IO是面向流的,NIO是面向块(缓冲区)的。
    • IO面向流的操作一次一个字节地处理数据。导致了数据的读取和写入效率不佳;
    • NIO面向块的操作。按块处理数据比按(流式的)字节处理数据要快得多,同时数据读取到一个它稍后处理的缓冲区,需要时可在缓冲区中前后移动。这就增加了处理过程中的灵活性。
  • IO是阻塞的,NIO是非阻塞的。
    • 对于传统的IO,当一个线程调用read() 或 write()时,该线程被阻塞,直到有一些数据被读取,或数据完全写入。该线程在此期间不能再干任何事情了。
    • 而对于NIO,使用一个线程发送读取数据请求,没有得到响应之前,线程是空闲的,此时线程可以去执行别的任务,而不是像IO中那样只能等待响应完成。

NIO和IO适用场景

  • NIO是为弥补传统IO的不足而诞生的,但是NIO也有缺点,因为NIO是面向缓冲区的操作,每一次的数据处理都是对缓冲区进行的,那么就会有一个问题,在数据处理之前必须要判断缓冲区的数据是否完整或者已经读取完毕,如果没有,假设数据只读取了一部分,那么对不完整的数据处理没有任何意义。所以每次数据处理之前都要检测缓冲区数据。
  • 如果需要管理同时打开的成千上万个连接,这些连接每次只是发送少量的数据,例如聊天服务器,这时候用NIO处理数据可能是个很好的选择。
  • 而如果只有少量的连接,而这些连接每次要发送大量的数据,这时候传统的IO更合适。
  • 使用哪种处理数据,需要在数据的响应等待时间和检查缓冲区数据的时间上作比较来权衡选择。

Channel

概述

  • 既可以从通道中读取数据,又可以写数据到通道。但流的读写通常是单向的。
  • 通道可以异步地读写。
  • 通道中的数据总是要先读到一个Buffer,或者总是要从一个Buffer中写入。

Channel的实现

  • FileChannel:通过文件读写数据。只能通过getChannel()方法来创建对象,不能直接来创建对象。如:
FileInputStream fis = new FileInputStream("D:\\file-read.txt"); //  IOFile流
ReadableByteChannel rbc = fis.getChannel(); // 转换为Channel对象
  • DatagramChannel:通过UDP(用户数据报协议)读写网络中的数据。使用工厂方法来创建新对象。如:
DatagramChannel ch = DatagramChannel.open(); // 打开
DatagramChannel ch = DatagramChannel.close(); // 关闭
  • SocketChannel:通过TCP(传输控制协议)读写网络中的数据。使用工厂方法来创建新对象。如
// 打开
SocketChannel ch = SocketChannel.open();  
ch.connect(new InetSocketAddress("somehost", someport));

// 关闭
SocketChannel ch = SocketChannel.close();  
ch.connect(new InetSocketAddress("somehost", someport));
  • ServerSocketChannel:可以监听TCP连接,像web服务器一样。对每一个连接都会创建一个SocketChannel。如:
// 打开
ServerSocketChannel ch = ServerSocketChannel.open();  
ch.socket().bind (new InetSocketAddress (somelocalport));

// 关闭
ServerSocketChannel ch = ServerSocketChannel.close();  
ch.socket().bind (new InetSocketAddress (somelocalport));

Channel接口

public interface Channel extends Closeable {
	public boolean isOpen(); // 检查通道是否开启
    public void close() throws IOException; // 关闭通道
}
java NIO及NIO聊天室 参考链接: java NIO实例1:http://blog.chinaunix.net/uid-25808509-id-3346228.html java NIO教程之selector(一系列):http://ifeve.com/selectors/ java NIO与IO的比较:http://blog.youkuaiyun.com/keda8997110/article/details/19549 阅读详情

相关推荐

细说Java NIO

Java NIO技术的使用合辑

全网最清晰JAVA NIO,看一遍就会

进来!一文讲明白JAVA NIO,全网最好的讲解!

BugMan的博客 6357

java nio ppt

java nio 相关 ppt,介绍了 java nio 的基本概念以及和其他 io 的区别

Java NIO 详解(一)

NIO即新的输入输出,这个库是在JDK1.4中才引入的。它在标准java代码中提供了高速的面向块的IO操作。 一、基本概念描述 1.1 I/O简介 I/O即输入输出,是计算机与外界世界的一个借口。IO操作的实际主题是操作系统。在java编程中,一般使用流的方式来处理IO,所有的IO都被视作是单个字节的移动,通过stre...

weixin_33795743的博客 1554

测绘无人船避坑指南:云卓H12Pro遥控器接海康摄像头,从网络设置到RTSP流延迟优化全流程

本文详细解析了测绘无人船视频子系统的优化方案,重点介绍海康威视摄像头与云卓H12Pro遥控器的深度适配流程。从网络设置到RTSP流延迟优化,提供了一套经过实测的低延迟(<200ms)解决方案,适用于复杂水域环境下的测绘任务。

weixin_30415113的博客 625

SecureCRT 9.0最新版安装与激活全攻略(附驱动识别技巧)

本文提供SecureCRT 9.0最新版的详细安装与激活指南,并重点解析了嵌入式开发中串口连接的硬件驱动识别技巧。内容涵盖从安全获取软件、解决USB转串口驱动兼容性问题,到配置SSH与串口会话的完整流程,旨在帮助开发者和工程师高效部署并精通使用这款终端仿真利器。

star的博客 410

Java NIO全面详解

NIO 中的 N 可以理解为 Non-blocking,不单纯是 New,是解决高并发、I/O高性能的有效方式。Java NIO是Java1.4之后推出来的一套IO接口,NIO提供了一种完全不同的操作方式, NIO支持面向缓冲区的、基于 通道的IO操作。新增了许多用于处理输入输出的类,这些类都被放在java.nio包及子包下,并且对原java.io包中的很多类进行改写,新增了满足NIO的功能。

JDKSDD的博客 841

ROS2节点通信实战:用C++手写一个‘智能小车’控制模型(附完整代码)

本文详细介绍了如何使用ROS2和C++构建一个智能小车控制模型,涵盖运动控制节点、电池管理服务、参数动态配置和Rviz可视化等核心功能。通过实战项目演示ROS2节点通信机制,帮助开发者快速掌握机器人开发的关键技术,并提供了完整的代码实现和系统集成方案。

weixin_30607029的博客 261

Java NIO 详解

NIO 是 Java SE 1.4 引入的一组新的 I/O 相关的 API,它提供了非阻塞式 I/O、选择器、通道、缓冲区等新的概念和机制。相比与传统的 I/O 多出的 N 不是单纯的 New,更多的是代表了 Non-blocking 非阻塞,NIO具有更高的并发性、可扩展性以及更少的资源消耗等优点。

qq_33807380的博客 1万+

RTX 4060笔记本也能跑!保姆级教程:用Ollama在Windows上部署DeepSeek-R1-8B模型

本文详细介绍了如何在RTX 4060笔记本上通过Ollama本地部署DeepSeek-R1-8B模型,提供从环境配置到性能调优的全流程优化指南。针对笔记本用户的显存、散热等问题,给出了量化模型选择、启动参数优化及散热解决方案,帮助用户在消费级硬件上高效运行大语言模型。

weixin_28745067的博客 524

使用PostgreSQL构建高可用数据库集群

在现代企业级应用中,数据库的高可用性已成为业务连续性的核心要求。PostgreSQL作为一款功能强大的开源关系型数据库,其高可用架构的设计直接影响着系统的稳定性和可靠性。

九天的专栏 1258

【java包系列】 java.nio 包详解

定义了缓冲区(buffers),它们是数据的容器,并提供了其他 NIO 包的概述。

wang2leee的博客 377

【论文翻译】YOLO26: KEY ARCHITECTURAL ENHANCEMENTS AND PERFORMANCE BENCHMARKING FOR REAL-TIME OBJECT DETEC

本研究对Ultralytics YOLO26进行了全面分析,重点阐述了其在实时边缘目标检测领域的关键架构改进与性能基准测试结果。YOLO26于2025年9月发布,是YOLO系列中最新、最先进的模型,专为在边缘设备和低功耗设备上实现高效能、高精度和部署就绪性而设计。论文依次详细介绍了YOLO26的架构创新,包括移除分布焦点损失(DFL)、采用端到端无非极大值抑制(NMS)推理、集成渐进式损失(ProgLoss)和小目标感知标签分配(STAL),以及引入MuSGD优化器以实现稳定收敛。

Limiiiing的博客 1682

JAVA NIO详解

1. IO 和 NIO 相关的预备知识 1.1 IO 的含义 讲 NIO 之前,我们先来看一下 IO。 Java IO 即 Java 输入输出。在开发应用软件时,很多时候都需要和各种输入输出相关的媒介打交道。与媒介进行 IO 操作的过程十分复杂,需要考虑众多因素,比如:进行 IO 操作媒介的类型(文件、控制台、网络)、通信方式(顺序、随机、二进制、按字符、按字、按行等等)。 Java 类库提供了相...

努力奔跑 2万+

【YOLOv11】014、YOLOv11模型导出:PyTorch到ONNX格式转换与优化

摘要:本文详细介绍了如何将PyTorch训练的YOLOv11模型高效转换为ONNX格式。重点包括:分离模型特征提取与后处理、设置动态维度、优化ONNX算子、验证转换正确性等关键步骤。作者分享了实际项目中的经验教训,如版本对齐、算子兼容性处理、后处理分离等实用技巧,并推荐使用onnx-simplifier工具优化模型。文章强调模型转换是一个需要反复调试的过程,建议保留转换记录形成知识库,以提高部署效率并避免常见错误。

企鹅码农的专属播客,分享10多年的实战案例和经验解读,包含YOLO、RT-DETR、AI等各个工作领域。 305

量化交易python代码解析:从狙击手算法到最优限价算法

在金融市场的竞技场上,量化交易如同一位冷静的策略大师,它以数学模型为剑,以计算机程序为盾,精准出击,捕捉市场的微妙波动。本文将深入探讨五种核心量化交易算法:直接委托算法(DMA)、时间加权平均算法(TWAP)、冰山算法(Iceberg)、狙击手算法(Sniper)、条件委托算法(Stop)以及最优限价算法(BestLimit),揭开它们背后的运作机制与实战应用。

木头大左的博客 1886

java nio 详_java NIO 详解

Java NIO(New IO)是从Java 1.4版本开始引入的一个新的IO API,可以替代标准的Java IO API。本系列教程将有助于你学习和理解Java NIO。Java NIO提供了与标准IO不同的IO工作方式:Channels and Buffers(通道和缓冲区):标准的IO基于字节流和字符流进行操作的,而NIO是基于通道(Channel)和缓冲区(Buffer)进行操作,数据总...

weixin_35282700的博客 1万+

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

【蔚来汽车日常实习】蔚来汽车Java后端实习

【蔚来汽车日常实习】蔚来汽车Java后端实习

qq_44653420的博客 1618

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

Java NIO详解

JAVA NIO 简介 NIO与IO的对比

代码充实生活的博客 1万+

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Java NIO真得就这么简单

Java NIO真得就这么简单 大多数人肯定了解Java IO, 但是对于NIO一般是陌生的,但是Java NIO是一个高频知识点,又不得不学,所以本文通过图文+代码的方式,保姆级别的讲述Java NIO的各个知识点。觉得写得好的,希望点个赞,给个收藏。 Java IO 与 Java NIO的区别 Java IO 与 Java NIO读取文件的差别 普通Java IO public static void ioReadFile(String fileName) throws Exception {

zycxnanwang的博客 2599

nio java是什么_JAVA NIO是什么(zz)

JAVA NIO是什么?1.基本概念IO 是主存和外部设备 ( 硬盘、终端和网络等 ) 拷贝数据的过程。 IO 是操作系统的底层功能实现,底层通过 I/O 指令进行完成。所有语言运行时系统提供执行 I/O 较高级别的工具。 (c 的 printf scanf,java 的面向对象封装 )2.Java标准 io回顾Java 标准 IO 类库是 io 面向对象的一种抽象。基于本地方法的底层实现,...

weixin_34828613的博客 2708

Java NIO 总结: NIO技术基础回顾

Java NIO是Java 1.4版本引入的一套新的IO API,它提供了非阻塞IO操作的功能,支持面向缓冲区的、基于通道的IO操作。Java NIO的核心组件包括Channels、Buffers和Selectors。

码到三十五 1560

java当中什么是NIO

Java NIO作为一种高效的I/O处理方式,特别适合于需要处理大量并发连接的场景。通过使用通道、缓冲区和选择器,NIO在提供非阻塞I/O操作的同时,也提供了灵活的数据处理能力。尽管NIO的编程模型比传统的BIO更为复杂,但在高并发、高性能的应用中,NIO无疑是一个值得选择的解决方案。随着Java的发展,NIO已经成为Java生态中不可或缺的重要组成部分,未来它在高性能计算和并发处理领域将继续发挥重要作用。

Flying_Fish_roe的博客 2611

java nio_什么是JAVA NIO

NIO(Non-Blocking I/O,java中,也称为New I/O),是一种同步非阻塞的I/O模型,也是I/O多路复用的基础,已经被越来越多地应用到大型应用服务器,是解决高并发、I/O处理问题的有效方式。一、传统的BIOBIO(Blocking I/O)即同步阻塞I/O,在NIO出现之前主要使用BIO及新建线程的方式来解决并发请求,但这样很容易因线程瓶颈而造成限制。下面是BIO的经典编程模...

weixin_33838871的博客 239

Java NIO(一):认识NIO

本文介绍了Java NIO的核心概念与应用场景。NIO通过缓冲区、通道和选择器三大组件,解决了传统IO在高并发和大数据量传输时的性能瓶颈。文章对比了BIO与NIO的差异,详细解析了Buffer的工作原理和Channel类型,并举例说明了Selector在多路复用中的优势。通过文件拷贝的代码示例展示了NIO的实际应用,同时从直接内存和零拷贝两方面解释了NIO的性能优势。最后指出BIO适用于简单场景,而NIO更适合高并发网络应用,并建议网络编程优先使用Netty框架而非原生NIO。全文系统性地阐述了NIO的核心

欧阳方超的专栏 1147
上一篇: Java序列化
下一篇: NIO之Buffer
菜鸟=大神
博客等级 码龄11年 5粉丝 43原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值