`
adoph
  • 浏览: 5379 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

java中NIO与普通IO浅析

 
阅读更多
面向流与面向缓冲(来自百度)

Java NIO和IO之间第一个最大的区别是,IO是面向流的,NIO是面向缓冲区的。 Java IO面向流意味着每次从流中读一个或多个字节,直至读取所有字节,它们没有被缓存在任何地方。此外,它不能前后移动流中的数据。如果需要前后移动从流中读取的数据,需要先将它缓存到一个缓冲区。 Java NIO的缓冲导向方法略有不同。数据读取到一个它稍后处理的缓冲区,需要时可在缓冲区中前后移动。这就增加了处理过程中的灵活性。但是,还需要检查是否该缓冲区中包含所有您需要处理的数据。而且,需确保当更多的数据读入缓冲区时,不要覆盖缓冲区里尚未处理的数据。
阻塞与非阻塞IO
Java IO的各种流是阻塞的。这意味着,当一个线程调用read() 或 write()时,该线程被阻塞,直到有一些数据被读取,或数据完全写入。该线程在此期间不能再干任何事情了。 Java NIO的非阻塞模式,使一个线程从某通道发送请求读取数据,但是它仅能得到目前可用的数据,如果目前没有数据可用时,就什么都不会获取。而不是保持线程阻塞,所以直至数据变的可以读取之前,该线程可以继续做其他的事情。 非阻塞写也是如此。一个线程请求写入一些数据到某通道,但不需要等待它完全写入,这个线程同时可以去做别的事情。 线程通常将非阻塞IO的空闲时间用于在其它通道上执行IO操作,所以一个单独的线程现在可以管理多个输入和输出通道(channel)。
选择器(Selectors)
Java NIO的选择器允许一个单独的线程来监视多个输入通道,你可以注册多个通道使用一个选择器,然后使用一个单独的线程来“选择”通道:这些通道里已经有可以处理的输入,或者选择已准备写入的通道。这种选择机制,使得一个单独的线程很容易来管理多个通道。
NIO和IO如何影响应用程序的设计
无论您选择IO或NIO工具箱,可能会影响您应用程序设计的以下几个方面:
1.对NIO或IO类的API调用。
2.数据处理。
3.用来处理数据的线程数。
API调用
当然,使用NIO的API调用时看起来与使用IO时有所不同,但这并不意外,因为并不是仅从一个InputStream逐字节读取,而是数据必须先读入缓冲区再处理。
数据处理
使用纯粹的NIO设计相较IO设计,数据处理也受到影响。
分享到:
评论

相关推荐

    Java NIO:浅析IO模型_动力节点Java学院整理

    Java NIO:浅析IO模型 Java NIO是Java语言中用于高性能I/O操作的API,理解IO模型是学习Java NIO的基础。本文将从同步和异步的概念开始,然后介绍阻塞和非阻塞的区别,接着介绍阻塞IO和非阻塞IO的区别,最后介绍五种...

    JavaNIO浅析IO模型Java开发Java经验技巧共1

    与传统的IO模型相比,NIO具有非阻塞、多路复用等优点,尤其适用于高并发、低延迟的网络应用。本文将深入浅出地探讨Java NIO的基本概念、主要组件以及它如何改进了传统的IO模型。 一、Java NIO概述 在Java传统的IO...

    java7源码-java-nio-master:Java

    java7 源码 java-nio-master java Nio 主要内容: (1) 按操作方式分类结构图: ...NIO的特性/NIO与IO区别: 1)IO是面向流的,NIO是面向缓冲区的; 2)IO流是阻塞的,NIO流是不阻塞的; 3)NIO有选择器,而

    Socket高性能IO模型浅析

    (3)IO多路复用(IOMultiplexing):即经典的Reactor设计模式,有时也称为异步阻塞IO,Java中的Selector和Linux中的epoll都是这种模型。(4)异步IO(AsynchronousIO):即经典的Proactor设计模式,也称为异步非...

    Java NIO:浅析I/O模型

    在进入Java NIO编程之前,我们先来讨论一些比较基础的知识:I/O模型。下面本文先从同步和异步的概念 说起,然后接着阐述了阻塞和非阻塞的区别,接着介绍了阻塞IO和非阻塞IO的区别,然后介绍了同步IO和异步IO的区别,...

    高性能IO模型浅析

    ### 高性能IO模型浅析 #### 一、同步阻塞IO (Blocking IO) 同步阻塞IO是最传统也是最简单的IO模型。在这种模型下,当应用程序(用户线程)发起IO请求时,它将被完全阻塞,直到IO操作完成。这种阻塞发生在内核空间...

    JAVA高级编程资料

    此外,JAVA NIO(New IO)提供了一种非阻塞I/O模型,通过选择器(Selector)和通道(Channel)提高网络通信的效率。 文件与流是JAVA操作数据的重要手段。JAVA的File类提供了文件操作的基本功能,如创建、删除、...

    浅析Java IO相关知识点

    Java IO(Input/Output)是Java编程语言中用于处理输入输出操作的重要部分,涉及与外部设备、文件系统、网络通信的交互。理解Java IO的工作原理和相关知识点对于开发者来说至关重要,尤其是在进行系统级编程和高性能...

    浅析《Java程序设计》的微课设计与实现.zip

    在本压缩包中,主要包含了一份关于“浅析《Java程序设计》的微课设计与实现”的PDF文档,这显然是一份深入探讨如何利用微课技术来教授Java编程的资料。微课是一种短小精悍的教学模式,通常涵盖一个特定的主题或技能...

    浅析Comet技术在Java Web实时系统开发中的应用.pdf

    非阻塞IO是Java提供的一种高效处理大量并发连接的技术,通过Java的NIO库实现。在非阻塞模式下,一个线程可以处理多个连接,当某个连接有数据可读或可写时,系统会通知线程进行处理,而不是一直等待数据的到达,这样...

    浅析Comet技术在Java Web实时系统开发中的应用.docx

    Java的NIO(New I/O)库提供了这样的功能,使得服务器可以在不阻塞其他连接的情况下处理Comet请求。 在使用Comet技术开发Java Web实时系统时,首先需要设计一个能够处理长连接的服务器架构,这可能涉及到对HTTP...

    Java基础知识点 - 内容比较全面

    14. **Java数组浅析**:数组是Java中存储固定数量相同类型元素的集合,支持索引访问。深浅拷贝的概念在数组复制时也会涉及,浅拷贝只复制引用,深拷贝复制整个对象及其内容。 这些知识点构成了Java开发者必备的基础...

    netty5 HTTP协议栈浅析与实践

    import io.netty.channel.nio.NioEventLoopGroup; import io.netty.channel.socket.SocketChannel; import io.netty.handler.codec.http.HttpObjectAggregator; import io.netty.handler.codec.http.HttpServerCodec...

Global site tag (gtag.js) - Google Analytics