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

Java NIONIO概述

在上一篇博文中讲述了几种IO模型,现在我们开始进入Java NIO编程主题。NIOJava 4里面提供API,目的是用来解决传统IO问题。...本文下面分别从Java NIO几个基础概念介绍起。   ...一.NIO几个基础概念   在NIO中有几个比较关键概念:Channel(通道),Buffer(缓冲区),Selector(选择器)。   ...而Channel是双向,既可用来进行读操作,又可用来进行写操作。   Buffer(缓冲区),是NIO中非常重要一个东西,在NIO中所有数据读和写都离不开Buffer。...文件写入字符串"java nio",注意在调用channelwrite方法之前必须调用bufferflip方法,否则无法正确写入内容,至于具体原因将在下篇博文中具体讲述Buffer用法时阐述。

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

java nio_(一) Java NIO 概述

二.NIO原理及通信模型 Java NIO是在jdk1.4开始使用,它既可以说成“新I/O”,也可以说成非阻塞式I/O。下面是java NIO工作原理: 1....Java NIO服务端只需启动一个专门线程来处理所有的 IO 事件,这种通信模型是怎么实现呢?呵呵,我们一起来探究它奥秘吧。...java NIO采用了双向通道(channel)进行数据传输,而不是单向流(stream),在通道上可以注册我们感兴趣事件。...下面是我理解java NIO通信模型示意图: 三、Java NIO概述 Java NIO 由以下几个核心部分组成: Channels Buffers Selectors 虽然Java NIO 中除此之外还有很多类和组件...; import java.nio.ByteBuffer; import java.nio.channels.SelectionKey; import java.nio.channels.Selector

44310

Java NIO

了解javaNIO,需要先了解同步异步以及阻塞非阻塞概念,同步/异步,阻塞/非阻塞 NIO就是采用同步非阻塞这种组合方式。或简单一点,采用是IO复用策略,可以使用一个线程管理多个IO连接。...JavaNIO 原理接说到这里,下面看一下jdk中NIO实现和用法。jdk中NIO实现,主要几个部分是Channel(通道),Buffer(缓冲区),Selector(选择器)。...综上所述,JavaNIO是以Selector为核心,基于同步非阻塞IO多路复用。 OSIO多路复用 那么,Selector是如何得知哪些通道是就已经就绪了呢?...参考文章: Java NIO系列教程 Java NIONIO概述 Java IO & NIO & NIO2 Java 网络 IO 模型 Java NIO系列教程(六) 多路复用器Selector Java...网络IO编程总结(BIO、NIO、AIO均含完整实例代码) Java NIO 反应堆模式简单模型 Java NIO(7): Epoll版Selector Linux IO模式及 select、poll

1.2K40

Java NIO

Java API中提供了两套NIO,一套是针对标准输入输出NIO,另一套就是网络编程NIO。...二、NIO和IO主要区别 下表总结了Java IO和NIO之间主要区别: IO NIO 面向流 面向缓冲 阻塞IO 非阻塞IO 无 选择器 1、面向流与面向缓冲 Java IO和NIO...Java NIO缓冲导向方法略有不同。数据读取到一个它稍后处理缓冲区,需要时可在缓冲区中前后移动。这就增加了处理过程中灵活性。但是,还需要检查是否该缓冲区中包含所有您需要处理数据。...3、选择器(Selectors) Java NIO选择器允许一个单独线程来监视多个输入通道,你可以注册多个通道使用一个选择器,然后使用一个单独线程来“选择”通道:这些通道里已经有可以处理输入...Java NIO: 单线程管理多个连接 如果你有少量连接使用非常高带宽,一次发送大量数据,也许典型IO服务器实现可能非常契合。下图说明了一个典型IO服务器设计: ?

66230

java nio

NIO阻塞式 3. Selector(选择器) 3.1. SelectionKey 3.2. NIO非阻塞式 4....DatagramChannel:UDP 获取通道 本地IO,提供了getChannel()方法获取通道 FileInputStream FileOutputStram RandomAccessFile 在JDK1.7中NIO...,针对各个通道提供了静态方法open() 在JDK1.7中NIOFiles工具类newByteChannel() 实例 利用通道实现文件复制(非直接缓冲区) /** * 使用getChannel...阻塞式 阻塞或者不阻塞是针对SocketChannel,ServerSocketChannel NIO套接字可以轻松在阻塞和非阻塞之间切换,这里我们使用NIO实现阻塞式TCP数据传输 /**...:读就绪 SelectionKey.OP_WRITE:写就绪 NIO非阻塞式 /** * 客户端需要使用configureBlocking(false)设置成非阻塞模式 * @throws Exception

1.1K20

Java NIO

二.NIO原理及通信模型 Java NIO是在jdk1.4开始使用,它既可以说成“新I/O”,也可以说成非阻塞式I/O。下面是java NIO工作原理: 1....Java NIO服务端只需启动一个专门线程来处理所有的 IO 事件,这种通信模型是怎么实现呢?呵呵,我们一起来探究它奥秘吧。...java NIO采用了双向通道(channel)进行数据传输,而不是单向流(stream),在通道上可以注册我们感兴趣事件。...下面是我理解java NIO通信模型示意图: image.png 三、Java NIO 概述 Java NIO 由以下几个核心部分组成: Channels Buffers Selectors 虽然...java.nio.ByteBuffer;import java.nio.channels.SelectionKey;import java.nio.channels.Selector;import java.nio.channels.ServerSocketChannel

40350

Java NIO系列教程(一)java NIO简介

java标准IO回顾 Java 标准 IO 类库是 io 面向对象一种抽象。基于本地方法底层实现,我们无须关注底层实现。...java NIO简介 Java NIO(New IO Non Blocking IO)是从Java1.4版本开始引入一个新IO API,可以替代标准Java IO API。...Java NIO与IO主要区别 下表总结了Java NIO和IO之间主要差别,我会更详细地描述表中每部分差异。...此外,它不能前后移动流中数据。如果需要前后移动从流中读取数据,需要先将它缓存到一个缓冲区。 Java NIO缓冲导向方法略有不同。数据读取到一个它稍后处理缓冲区,需要时可在缓冲区中前后移动。...通道与缓冲区 Java NIO系统核心在于:通道(Channel)和缓冲区(Buffer)。 Buffer:表示打开到IO设备(例如:文件、套接字)连接。 是一块连续内存块。

40620

Java SE】Java NIO系列教程(一) Java NIO 概述

Java NIO 由以下几个核心部分组成: Channels Buffers Selectors 虽然Java NIO 中除此之外还有很多类和组件,但在我看来,Channel,Buffer 和 Selector...Channel 和 Buffer 基本上,所有的 IO 在NIO 中都从一个Channel 开始。Channel 有点象流。...下面是JAVA NIO一些主要Channel实现: FileChannel DatagramChannel SocketChannel ServerSocketChannel 正如你所看到,这些通道涵盖了...以下是Java NIO里关键Buffer实现: ByteBuffer CharBuffer DoubleBuffer FloatBuffer IntBuffer LongBuffer ShortBuffer...Java NIO 还有个 Mappedyteuffer,用于表示内存映射文件, 我也不打算在概述中说明。 Selector Selector允许单线程处理多个 Channel。

72170

Java NIO-12.NIO和IO

学习了Java NIO和IO API之后,就有了一个问题: 什么时候用IO,什么时候用NIO? 本文将试着阐明Java NIO和IO之间使用上区别,以及它们是如何影响到你代码设计。...Java NIO和IO之间主要区别 IO NIO 面向流 面向缓冲区 阻塞IO 非阻塞IO 选择器 下面的表格总结了Java NIO和IO区别。表格后面对更多细节进行说明。...如果需要前后移动流中数据,就需要先将它们存在缓冲区中。 Java NIO面向缓冲区方式有点不同。数据被读到一个稍后才使用缓冲区。缓冲区中数据能根据需要前后移动。...Java NIO非阻塞模式使线程能够从通道请求读取数据,仅得到当前可用部分,如果当前没有数据可用就什么都得不到。而不是在数据可读之前保持阻塞,线程能继续处理其他事情。 非阻塞写是一样。...在IO请求非阻塞空闲期间,线程通常在处理其他通道IO。这样,一个线程能够处理多个通道输入输出。 选择器(Selectors) Java NIO选择器让一个线程能够监控多个通道输出。

74020

浅析 Java NIO

一、简介 现在使用 NIO 场景越来越多,很多网上技术框架或多或少使用 NIO 技术,譬如 Tomcat、Jetty、Netty,学习和掌握 NIO 技术已经不是一个 Java 攻城狮加分技能,...NIOJava 1.4 中引入,对应代码实现在java.nio包下,涉及到核心类关联关系,如下图: 上图中有三个关键类:Channel 、Selector 和 Buffer,它们是 NIO...3.2、Buffer 类详解 接着我们再来说说 Buffer,也称为缓冲区,在 Java NIO 中负责数据存取。...不过 java NIO 并没有完全屏蔽平台差异,它仍然是基于各个操作系统 I/O 系统实现,差异仍然存在。...解决了很多 NIO 陷阱,并屏蔽了操作系统差异,有较好性能和编程模型。 五、参考 1、美团技术团队 - Java NIO浅析 1、hepingfly - JavaNIO 看这一篇就够了

29731

Java SE】Java NIO系列教程(十二)Java NIO与IO

当学习了Java NIO和IOAPI后,一个问题马上涌入脑海: 我应该何时使用IO,何时使用NIO呢?...在本文中,我会尽量清晰地解析Java NIO和IO差异、它们使用场景,以及它们如何影响您代码设计。...Java NIO和IO主要区别 下表总结了Java NIO和IO之间主要差别,我会更详细地描述表中每部分差异。...Java NIO非阻塞模式,使一个线程从某通道发送请求读取数据,但是它仅能得到目前可用数据,如果目前没有数据可用时,就什么都不会获取。...Java NIO: 单线程管理多个连接 如果你有少量连接使用非常高带宽,一次发送大量数据,也许典型IO服务器实现可能非常契合。下图说明了一个典型IO服务器设计: ?

83550

java NIO浅析

NIO(Non-blocking I/O,在Java领域,也称为New I/O),是一种同步非阻塞I/O模型,也是I/O多路复用基础,已经被越来越多地应用到大型应用服务器,成为解决高并发与大量连接...NIONIO(New IO)是一个可以替代标准Java IO APIIO API(从Java 1.4开始),Java NIO提供了与标准IO不同IO工作方式。  ...Java NIO可以让你非阻塞使用IO,例如:当线程从通道读取数据到缓冲区时,线程还是可以进行其他事情。当数据被写入到缓冲区时,线程可以继续处理它。从缓冲区写入通道也类似。  ...Java NIO引入了选择器概念,选择器用于监听多个通道事件(比如:连接打开,数据到达)。因此,单个线程可以监听多个数据通道。 缓冲区(Buffer): 为什么说NIO是基于缓冲区IO方式呢?...相关链接:美团技术团队-java NIO浅析

65420

JAVA NIO Channel

通过API主要由接口指定(面向接口),通道实现经常要操作本地操作系统代码,所以不同操作系统实现会有根本差异性,通道接口允许以可控且可抑制方式来访问底层IO. ?...ByteChannle: 只是一个提供继承便捷借口。简化类定义语法糖。所有通道基本都是双向。 通道会连接一个特定IO服务,且通道实例性能受所连接IO服务特征限制。...ByteChannel read()和write()方法是用ByteBuffer作为参数,返回已传输字节数,比缓冲区字节数少或者可能为0,因为一次输出不完,缓冲去位置会与已传输字节相同数量前移...通道关闭: 通道不能被重复利用,打开通道代表与一个特定IO服务特定链接并封装该链接状态,通道关闭则链接丢失。 通道上多次close(),无影响。...通道上休眠线程中断区别于selectors上休眠线程中断。

44210

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券