首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Java NIO:NIO概述

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

    66710

    Java NIO

    了解java的NIO,需要先了解同步异步以及阻塞非阻塞的概念,同步/异步,阻塞/非阻塞 NIO就是采用的同步非阻塞这种组合方式。或简单一点,采用的是IO复用的策略,可以使用一个线程管理多个IO连接。...Java中的NIO 原理接说到这里,下面看一下jdk中NIO的实现和用法。jdk中的NIO的实现,主要几个部分是Channel(通道),Buffer(缓冲区),Selector(选择器)。...综上所述,Java的NIO是以Selector为核心的,基于同步非阻塞的IO多路复用。 OS的IO多路复用 那么,Selector是如何得知哪些通道是就已经就绪了呢?...参考文章: Java NIO系列教程 Java NIO:NIO概述 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 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

    55610

    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服务器设计: ?

    69330

    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中的NIO的Files工具类的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

    44350

    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设备(例如:文件、套接字)的连接。 是一块连续的内存块。

    42920

    Java NIO 开发

    Java NIO 新篇介绍加示例代码 Java NIO(New IO)是 JDK 1.4 引入的一组新的 I/O API,用于支持非阻塞式 I/O 操作。...相比传统的 Java IO API,NIO 提供了更快、更灵活的 I/O 操作方式,可以用于构建高性能网络应用程序。...相比传统的 Java IO,Java NIO 的优点包括: 非阻塞模式:NIO 可以使用非阻塞模式进行网络编程,使程序不必等待网络操作完成才能进行其他操作,提高了程序的响应速度。...我在早期有讲过Java NIO的基本用法 如果初学者可以 浏览 早期的Java NIO 文章 一,Channel实现类 Channel实现类 讲解 在Java NIO中,Channel是一个重要的概念,...FileChannel类是Java NIO中用于对文件进行读写操作的通道。它提供了一系列方法来实现文件的读取和写入操作。

    8910

    【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。

    76070

    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的选择器让一个线程能够监控多个通道的输出。

    76520

    Java NIO与Java BIO的区别

    1.什么是Java NIO? 同步非阻塞io模式,拿烧开水来说,NIO的做法是叫一个线程不断的轮询每个水壶的状态,看看是否有水壶的状态发生了改变,从而进行下一步的操作。...Java NIO有三大组成部分:Buffer,Channel,Selector,通过事件驱动模式实现了什么时候有数据可读的问题。...channel 和 buffer 之间的交互如下: CHANNEL BUFFER.png Selector:Selector(选择器)是Java NIO中能够检测一到多个NIO通道,通道将关心的事件注册到...这样,一个单独的线程可以管理多个channel,从而管理多个网络连接。 selector工作模式.png 2.什么是Java BIO?...} catch (IOException e) { e.printStackTrace(); } } 参考资料: http://ifeve.com/java-nio-vs-io

    57310

    Java NIO Channel 的使用

    Java NIO 中的 Channel 分类: FileChannel SocketChannel ServerSocketChannel DatagramChannel channel 分类 FileChannel...好了,当你运行完代码你会发现,虽然文件是生成的了,但是里面却是空白的...这其实就涉及到对 ByteBuffer 的熟悉程度了,算是埋的一个坑。...这是因为我们创建一个 ByteBuffer 的时候默认是处于写模式的,此时如果去通过 position 和 limit 去读取数据是读不到的。...Java NIO 中默认的阻塞模式,仅仅作为一个掩饰,如果想要 ServerSocketChannel 进入非阻塞模式,可在 open 之后,调用: serverSocketChannel.configureBlocking...可以看到服务器侧的控制台有如下的输出: socketChannel java.nio.channels.SocketChannel[connected local=/127.0.0.1:8080 remote

    30030

    Java NIO浅析

    NIO(Non-blocking I/O,在Java领域,也称为New I/O),是一种同步非阻塞的I/O模型,也是I/O多路复用的基础,已经被越来越多地应用到大型应用服务器,成为解决高并发与大量连接、...NIO是怎么工作的 很多刚接触NIO的人,第一眼看到的就是Java相对晦涩的API,比如:Channel,Selector,Socket什么的;然后就是一坨上百行的代码来演示NIO的服务端Demo……瞬间头大有没有...Java的Selector对于Linux系统来说,有一个致命限制:同一个channel的select不能被并发的调用。...函数,zero-copy IO多路复用大大提高了Java网络应用的可伸缩性和实用性 本文抛砖引玉,诠释了一些NIO的思想和设计理念以及应用场景,这只是从冰山一角。...关于NIO可以谈的技术点其实还有很多,期待未来有机会和大家继续探讨。 作者简介 王烨,现在是美团旅游后台研发组的RD,之前曾经在百度、去哪儿和优酷工作过,专注Java后台开发。

    53740

    扫码

    添加站长 进交流群

    领取专属 10元无门槛券

    手把手带您无忧上云

    扫码加入开发者社群

    相关资讯

    热门标签

    活动推荐

      运营活动

      活动名称
      广告关闭
      领券