IO 和 NIO 的思考】的更多相关文章

输入输出是操作系统不可或缺的一部分,大致分为两类:面向磁盘和面向网络.在 Java 中有3种 I/O 类型:BIO.NIO 和 AIO,分别是同步阻塞.同步非阻塞和异步非阻塞 I/O,这里着重描述 BIO 和 NIO 的区别和常用的编程模型. 1. 为什么设计 NIO 一个直接原因就是为了更好的利用操作系统特性,改善和扩展原有 API.与 NIO 相关的规范有两个: JSR 51:它是 NIO 的第一个规范,关注缓冲区.通道和字符集的设计,引入一个简单的面向缓冲区的 I/O 模型,并且提供一套非…
面试时答: IO是面向流的,NIO是面向缓冲区的 Java IO面向流意味着每次从流中读一个或多个字节,直至读取所有字节,它们没有被缓存在任何地方: NIO则能前后移动流中的数据,因为是面向缓冲区的 IO流是阻塞的,NIO流是不阻塞的 Java IO的各种流是阻塞的.这意味着,当一个线程调用read() 或 write()时,该线程被阻塞,直到有一些数据被读取,或数据完全写入.该线程在此期间不能再干任何事情了 Java NIO的非阻塞模式,使一个线程从某通道发送请求读取数据,但是它仅能得到目前可…
JAVA NIO vs IO 当我们学习了Java NIO和IO后,我们很快就会思考一个问题: 什么时候应该使用IO,什么时候我应该使用NIO 在下文中我会尝试用例子阐述java NIO 和IO的区别,以及它们对你的设计会有什么影响 Java NIO和IO的主要区别 IO NIO 面向Stream 面向Buffer 阻塞IO 非阻塞IO   Selectors   面向Stream和面向Buffer Java NIO和IO之间最大的区别是IO是面向流(Stream)的,NIO是面向块(buffe…
  本篇文章主要使用IO和NIO的形式来实现一个简单的聊天室,并且说明IO方法存在的问题,而NIO又是如何解决的.   大概的框架为,先提供思路和大概框架图--代码--问题及解决方式,这样会容易看一点. 1. IO写法 1.1 思路框架   下面编写一个简单的聊天室,大概需要的功能就是服务端维护一个聊天室,里边的客户端发送消息之后服务将其消息转发给其他客户端,达到一个聊天室的效果.   大致的思路:服务端区分职责,分成两部分,主线程负责接收连接并把连接放入到线程池中处理,维护一个线程池,所有对于…
当学习了Java NIO和IO的API后,一个问题马上涌入脑海: 我应该何时使用IO,何时使用NIO呢?在本文中,我会尽量清晰地解析Java NIO和IO的差异.它们的使用场景,以及它们如何影响您的代码设计. Java NIO和IO的主要区别 下表总结了Java NIO和IO之间的主要差别,我会更详细地描述表中每部分的差异. IO                NIO 面向流            面向缓冲 阻塞IO           非阻塞IO 无 选择器 面向流与面向缓冲 Java NIO…
IO 是 Java 面试中一个非常重要的点.你应该很好掌握 Java IO,NIO,NIO2 以及与操作系统,磁盘 IO 相关的基础知识.下面是 Java IO 中经常问的问题. 66)在我 Java 程序中,我有三个 socket,我需要多少个线程来处理? 67)Java 中怎么创建 ByteBuffer? 68)Java 中,怎么读写 ByteBuffer ? 69)Java 采用的是大端还是小端? 70)ByteBuffer 中的字节序是什么? 71)Java 中,直接缓冲区与非直接缓冲器…
本文并非Java.io或Java.nio的使用手册,也不是如何使用Java.io与Java.nio的技术文档.这里只是尝试比较这两个包,用最简单的方式突出它们的区别和各自的特性.Java.nio提出了新的流(stream)通讯概念并且加入了新的缓冲.文件流以及socket(套接字)特性. java.io 概览 这个包通过数据流和序列化机制来实现系统输入和输出.并且支持多种类型的数据流,包括简单的字节.原生数据类型.地区字符以及对象.流是一个数据的序列:一个程序使用输入流从一个源头读取数据: 另一…
昨天面试问到了有关Java NIO的问题,没有答上来.于是,在网上看到了一篇很有用的系列文章讲Java IO的,浅显易懂.后面的备注里有该系列文章的链接.内容不算很长,需要两个小时肯定看完了,将该系列文章看完之后,我又参看了一些其他的资料,形成了一点自己不成熟的理解,将之记录下来,算是我自己学到的一点东西吧!有什么问题,希望大神能够不吝赐教. IO 的分类? 我自己的观点,IO大致可以分为本地IO(磁盘IO)和网络IO.所谓的本地IO,即本地的应用程序从磁盘里面读写数据,不涉及网络的概念:而网络…
用一个例子来阐释: 一辆客车上有10个乘客,他们的目的地各不相同,当没有售票员的时候,司机就需要不断的询问每一站是否有乘客需要下车,需要则停下,不需要则继续开车,这种就是阻塞的方式. 当有售票员的时候,每个乘客都将目的地告诉售票员,然后司机和售票员交流,当一个目的地到了的时候,售票员会通知大家,相应的乘客则下车. 这里我们把司机当做CPU,把乘客当做线程: 那么阻塞方式中:CPU需要不断的轮询,询问线程,是否达到目的地,进行上下文切换. 非阻塞方式中:CPU不需要轮询线程,每个线程都在休眠中,只…
堵塞IO实现: public class PlainEchoServer { public void serve(int port) throws IOException { final ServerSocket socket = new ServerSocket(port); try { while (true) { final Socket clientSocket = socket.accept(); System.out.println("Accepted connection from…