首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java NIO-12.NIOIO

学习了Java NIOIO API之后,就有了一个问题: 什么时候用IO,什么时候用NIO? 本文将试着阐明Java NIOIO之间使用上的区别,以及它们是如何影响到你的代码设计的。...Java NIOIO之间的主要区别 IO NIO 面向流 面向缓冲区 阻塞IO 非阻塞IO 选择器 下面的表格总结了Java NIOIO的区别。表格后面对更多的细节进行说明。...阻塞非阻塞IO Java IO中的各种流是阻塞的。这意味着当一个进程执行读或写的操作时,线程在读到数据或者写入完成之前,都是阻塞地。这期间进程不能进行任何操作。...NIOIO对应用设计的影响 IO工具箱是选择IO还是NIO可能在以下方面影响程序设计: 调用NIO还是IO类的API。...数据处理 处理数据的线程数 API调用 当然使用NIOIO调用的API看起来不一样。

74020
您找到你想要的搜索结果了吗?
是的
没有找到

浅谈Java BIO NIO

而通常网络连接,是一个客户端\服务端模型,在 Java世界里,ServerSocket 用来实现服务端接收网络请求,Socket 在客户端用于实现网络连接建立,并发送\接收传输数据,在服务端用于承接每一个连接请求...ServerSocket Socket 具体行为的实现为 SocketImpl,SocketImpl 封装了服务端bind、listen等内核操作函数,用来建立Socket监听对象;也封装了客户端connect...socket.close(); } catch (IOException e) { e.printStackTrace(); } } } 02 — 分析 NIO...Channel 持有 Socket、fd、SelectionKeys[] ,ServerSocketChannel SocketChannel,不能直接读取数据,需要使用 Buffer 缓冲区技术来获取数据...Selector.select方法检测到,然后通过遍历Selector上的所有就绪事件,进行相应事件的IO操作; 对于 Selector.select 方法,不同操作系统的实现不一样,select、pollepoll

45020

聊聊BIO,NIOAIO (2)磁盘IO磁盘IO的优化AIO反思AIO

本文从操作系统的角度来解释BIO,NIO,AIO的概念,含义背后的那些事。本文主要分为3篇。...第一篇 讲解BIONIO以及IO多路复用 第二篇 讲解磁盘IOAIO 第三篇 讲解在这些机制上的一些应用的实现方式,比如nginx,nodejs,Java NIO磁盘IO 磁盘IO,简单来说就是读取硬盘一类设备的...同时,对于操作系统在驱动程序之上的层次来说,访问磁盘数据的最小单位是“块”。即,即使你只想读取1个Byte,磁盘也至少要读取1个块;要写入1个Byte,磁盘也至少要写入一个块。...于是开发人员可以自己设计实现一套“Cache”,配合Direct IO。毕竟最熟悉数据访问场景的,是应用程序自己的需求。 ?...基于以上的这些问题,一般上层(nodejs,Java NIO)都会选择用线程池+BIO来模拟文件AIO。

3.9K90

Java IO NIO的区别

主要区别 IO NIO 面向字节流 面向缓冲区 阻塞 基于Selector的非阻塞 Java IO NIO的主要区别体现在以上两个方面,以下详细说明这些区别的具体含义。...面向流和面向缓冲区 这个概念编程方法中的面向过程、面向对象类似。Java IO 是面向流的而Java NIO是面向缓冲区的。...Java NIO的IO模型与很多IO的本质更加一致!磁盘IO读写就是数据块读写; TCP/IP协议传输的也是数据包而不是数据流。...阻塞非阻塞 Java IO是阻塞的,如果在一次读写数据调用时数据还没有准备好,或者目前不可写,那么读写操作就会被阻塞直到数据准备好或目标可写为止。...Java NIO 工作流程 Java NIO 提供 Selector 实现单个线程管理多个channel的功能。 其中select 调用可能是阻塞的,也可以是非阻塞的。

22110

5种调优Java NIONIO.2的方式?

这篇教程展示了5个在Java编程的一些常见场景里使用NIONIO.2包的简单示例。 NIONIO.2对于Java平台最大的贡献是提高了Java应用开发中的一个核心组件的性能:输入/输出处理。...如果能够正确地使用的话,Java NIONIO.2可以大大减少一些常用I/O操作所花的时间。这就是NIONIO.2所具有的超能力,我会在这篇文章里向你展示5种使用它们的简单方式。...相反,它是一个Java I/O相关的不同功能的集合。NIO通过使得Java应用的性能“更加接近实质”来达到性能提升的效果,也就是意味着NIONIO.2的API暴露了低层次的系统操作的入口。...要学习NIONIO.2的话,Java 2 SDK Standard Edition(SE) documentation Java SE 7 documentation 都是不可或缺的。...在一个更高的层次上,它能够使得文件访问的I/O的性能达到内存访问的速度。内存访问的速度往往比文件访问的速度快几个数量级。列表3是一个NIO内存映射的一个简单示例。 列表3.

72630

不学无数 — Java 中 IO NIO

/O接口: InputStream  OutputStream 基于字符操作的 I/O 接口: Writer  Reader 基于磁盘操作的 I/O 接口: File 然后在各个接口下还有其各自的包装类...类功能 BufferedInputStream使用它可以防止每次读取都进行与磁盘的交互,使用缓冲区进行一次性读取固定值的以后再向磁盘中执行写操作,减少了与磁盘的交互次数。...NIO 的创建目的是为了让 Java 程序员可以实现高速 I/O 而无需编写自定义的本机代码。NIO 将最耗时的 I/O 操作(即填充提取缓冲区)转移回操作系统,因而可以极大地提高速度。...在NIO中加入了Buffer对象,体现了之前的I/O的一个重要的区别。在面向流的I/O中我们直接通过流对象直接和数据进行交互的,但是在NIO中我们和数据的交互必须通过Buffer了。...但是一个缓冲器不仅仅是一个数组,缓冲器提供了对数据结构化的访问,而且还可以跟踪系统的读写进程。

31110

Java中IONIO的本质区别

简介 终于要写到java中最最让人激动的部分了IONIO。...NIO叫做new IO,是在java1.4中引入的新一代IO。 IO的本质是什么呢?它NIO有什么区别呢?我们该怎么学习IONIO呢? 别急,看完这篇文章一切都有答案。...IO的本质 IO的作用就是从外部系统读取数据到java程序中,或者把java程序中输出的数据写回到外部系统。这里的外部系统可能是磁盘,网络流等等。...IONIO的区别 java1.0中的IO是流式IO,它只能一个字节一个字节的处理数据,所以IO也叫做Stream IO。 而NIO是为了提升IO的效率而生的,它是以Block的方式来读取数据的。...NIO需要掌握的类的个数比IO要稍稍多一点,毕竟NIO要复杂一点。 就这么几十个类,我们就掌握了IONIO,想想都觉得兴奋。

79910

【说站】java ionio的区别

java ionio的区别 1、Java IONIO之间第一个区别是,IO是面向流的,NIO是面向缓冲区的。 Java IO面向流意味着每次都能从流中读取一个或多个字节。...Java NIO对Buffer的看法稍有不同。当数据被读取到buffer中时,buffer将在以后进行处理。如果您需要,您可以在buffer中移动数据;这使程序员在处理时更加灵活。...阻塞与非阻塞IO 2、Java IO中的各种流被堵塞,Java NIO是非阻塞模式保证线程要求从channel中读取数据。...Java IO中的各种流被堵塞,也就是说,当调用read()方法write()方法时,线程会被堵塞,直到数据被读取或完全写入。在此期间,处理流的线程将无法完成。...以上就是java ionio的区别分析,主要体会在面向的对象、阻塞方面的不同,感兴趣的小伙伴也可以找一些实例进行练习。

25240

Java NIO 之 Channel BufferChannelbufferPositionLimitCapacityJava NIO 读写文件实例程序参考

我们看一下读取的过程 先从IO设备,网卡或者磁盘将内容读取到内核中,对应于NIO就是从网卡或磁盘利用channel将数据读到buffer中 然后就是内核中的数据复制到进程缓冲区,对应于就是从buffer...缓冲区内部细节 本节将介绍 NIO 中两个重要的缓冲区组件:状态变量访问方法 (accessor)。 状态变量是前一节中提到的"内部统计机制"的关键。每一个读/写操作都会改变缓冲区的状态。...NIO Buffer Characteristics buffer是java NIO中的块的基础 buffer可以提供一个固定大小的容器来读取写入数据 任意一个buffer都是可读的,只有选中的buffer...java.nio.ByteBuffer; import java.nio.channels.FileChannel; import java.nio.file.Path; import java.nio.file.Paths.../java/j-nio/j-nio.html

86930

java.nio.heapbytebuffer_javastringbufferstring区别

手动写入数据 从SocketChannel中读入数据至ByteBuffer 从ByteBuffer中读数据 复位position 读取数据 确保数据长度 字节序处理 继续写入数据 总结 简介 在Java...这种阻塞式的Socket编程显然已经远远不能满足目前的并发式访问需求。...所以最近在项目中学习使用了Java原生NIO,这时则需要通过ServerSocketChannel的accept()方法获取到客户端的SocketChannel,再使用客户端SocketChannel直接进行读写...但SocketChannel.read(ByteBuffer dst)SocketChannel.write(ByteBuffer src)的方法中的参数则都变为了java.nio.ByteBuffer...JavaNIO提供了java.nio.ByteOrder枚举类来表示机器的字节序,同时提供了静态方法ByteOrder.nativeOrder()可以获取到当前机器使用的字节序,使用ByteBuffer

32220

Java 数组定义访问

今天说一说Java 数组定义访问[通俗易懂],希望能够帮助大家进步!!! 数组概念 数组概念: 数组就是存储数据长度固定的容器,保证多个数据的数据类型要一致。...水杯道理相同,买了一个2升的水杯,总容量就是2升,不能多也不能少。...举例: 定义可以存储3个整数的数组容器,代码如下: 此代码由Java架构师必看网-架构君整理 int[] arr = new int[3]; 方式二 格式: 数据类型[] 数组名 = new 数据类型...此代码由Java架构师必看网-架构君整理 int[] arr = new int[]{ 1,2,3,4,5}; 方式三 格式: 数据类型[] 数组名 = { 元素1,元素2,元素3......,从0开始,这个自动编号称为数组索引(index),可以通过数组的索引访问到数组中的元素。

73640

五种IO模型Java NIO源码分析

最近在学习Java网络编程Netty相关的知识,了解到Netty是NIO模式的网络框架,但是提供了不同的Channel来支持不同模式的网络通信处理,包括同步、异步、阻塞非阻塞。...学习要从基础开始,所以我们就要先了解一下相关的基础概念Java原生的NIO。这里,就将最近我学习的知识总结一下,以供大家了解。  ...为了节约你的时间,本文主要内容如下: 异步,阻塞的概念 操作系统I/O的类型 Java NIO的底层实现 异步,同步,阻塞,非阻塞 同步异步关注的是消息通信机制,所谓同步就是调用者进行调用后,在没有得到结果之前...异步I/O Java NIO的底层实现  我们都知道Netty通过JNI的方式提供了Native Socket Transport,为什么Netty要提供自己的Native版本的NIO呢?...明明Java NIO底层也是基于epoll调用(最新的版本)的.这里,我们先不明说,大家想一想可能的情况.下列的源码都来自于OpenJDK-8u40-b25版本. open方法  如果我们顺着Selector.open

68920

五种IO模型Java NIO源码分析

最近在学习Java网络编程Netty相关的知识,了解到Netty是NIO模式的网络框架,但是提供了不同的Channel来支持不同模式的网络通信处理,包括同步、异步、阻塞非阻塞。...学习要从基础开始,所以我们就要先了解一下相关的基础概念Java原生的NIO。这里,就将最近我学习的知识总结一下,以供大家了解。  ...为了节约你的时间,本文主要内容如下: 异步,阻塞的概念 操作系统I/O的类型 Java NIO的底层实现 异步,同步,阻塞,非阻塞 同步异步关注的是消息通信机制,所谓同步就是调用者进行调用后,在没有得到结果之前...异步I/O Java NIO的底层实现  我们都知道Netty通过JNI的方式提供了Native Socket Transport,为什么Netty要提供自己的Native版本的NIO呢?...明明Java NIO底层也是基于epoll调用(最新的版本)的.这里,我们先不明说,大家想一想可能的情况.下列的源码都来自于OpenJDK-8u40-b25版本. open方法  如果我们顺着Selector.open

75030

关于Java的BIO,NIOAIO的演进

前言 Java里面的IO模型种类较多,主要包括BIO,NIOAIO,每个IO模型都有不一样的地方,那么这些IO模型是如何演变呢,底层的原理又是怎样的呢? 本文我们就来聊聊。...为了强化Java在服务端的市场,终于在JSR-51也就是JDK4.0的时候发布了Java NIO,可以支持非阻塞IO。并新增了java.nio的包,提供很多异步开发的API类库。...NIO与Netty 既然Java拥有了各种IO体系,那么为什么还会出现Netty这种框架呢? Netty出现的主要原因,如下: (1)Java NIO类库API繁杂众多,使用麻烦。...(3)Java NIO异常体系不完善,如客户端面临断连,重连,网络闪断,半包读写,网络阻塞,异常码流等问题,虽然开发相对容易,但是可靠性稳定性并不高。...EPOLL,与NIO相同,因此在性能上没有明显的优势 (2)Windows的AIO底层实现良好,但Netty的开发者并没有把Windows作为主要使用平台,所以优化考虑Linux 总结 本文主要介绍了Java

96621

五种IO模型Java NIO源码分析

最近在学习Java网络编程Netty相关的知识,了解到Netty是NIO模式的网络框架,但是提供了不同的Channel来支持不同模式的网络通信处理,包括同步、异步、阻塞非阻塞。...学习要从基础开始,所以我们就要先了解一下相关的基础概念Java原生的NIO。这里,就将最近我学习的知识总结一下,以供大家了解。  ...为了节约你的时间,本文主要内容如下: 异步,阻塞的概念 操作系统I/O的类型 Java NIO的底层实现 异步,同步,阻塞,非阻塞 同步异步关注的是消息通信机制,所谓同步就是调用者进行调用后,在没有得到结果之前...Java NIO的底层实现  我们都知道Netty通过JNI的方式提供了Native Socket Transport,为什么Netty要提供自己的Native版本的NIO呢?...明明Java NIO底层也是基于epoll调用(最新的版本)的.这里,我们先不明说,大家想一想可能的情况.下列的源码都来自于OpenJDK-8u40-b25版本. open方法  如果我们顺着Selector.open

80150
领券