最近由于工作关系要做一些Java方面的开发,其中最重要的一块就是Java NIO(New I/O),尽管很早以前了解过一些,但并没有认真去看过它的实现原理,也没有机会在工作中使用,这次也好重新研究一下,顺便写点东西,就当是自己学习 Java NIO的笔记了。本文为NIO使用及原理分析的第一篇,将会介 ...
分类:
编程语言 时间:
2016-04-18 15:36:14
阅读次数:
342
在第一篇中,我们介绍了NIO中的两个核心对象:缓冲区和通道,在谈到缓冲区时,我们说缓冲区对象本质上是一个数组,但它其实是一个特殊的数组,缓冲区对象内置了一些机制,能够跟踪和记录缓冲区的状态变化情况,如果我们使用get()方法从缓冲区获取数据或者使用put()方法把数据写入缓冲区,都会引起缓冲区状态的 ...
分类:
编程语言 时间:
2016-04-18 15:33:37
阅读次数:
189
在上一篇文章中介绍了缓冲区内部对于状态变化的跟踪机制,而对于NIO中缓冲区来说,还有很多的内容值的学习,如缓冲区的分片与数据共享,只读缓冲区等。在本文中我们来看一下缓冲区一些更细节的内容。 缓冲区的分配 在前面的几个例子中,我们已经看过了,在创建一个缓冲区对象时,会调用静态方法allocate()来 ...
分类:
编程语言 时间:
2016-04-18 15:27:33
阅读次数:
241
在上一篇文章中介绍了关于缓冲区的一些细节内容,现在终于可以进入NIO中最有意思的部分非阻塞I/O。通常在进行同步I/O操作时,如果读取数据,代码会阻塞直至有 可供读取的数据。同样,写入调用将会阻塞直至数据能够写入。传统的Server/Client模式会基于TPR(Thread per Request ...
分类:
编程语言 时间:
2016-04-18 15:09:47
阅读次数:
146
缓冲区操作缓冲区,以及缓冲区如何工作,是所有I/O的基矗所谓“输入/输出”讲的无非就是把数据移进或移出缓冲区。进程执行I/O操作,归结起来,也就是向操作系统发出请求,让它要么把缓冲区里的数据排干(写),要么用数据把缓冲区填满(读)。进程使用read()系统调用,要求其..
分类:
编程语言 时间:
2016-04-17 23:28:05
阅读次数:
303
最后更新时间:2014-06-23
一个Java NIO管道是在两个线程之间的单向的数据连接。一个管道有一个源通道和一个下沉通道。你写数据到一个下沉的通道。这个数据然后从源通道中读取。
这里有一个管道原则的示意图:
创建一个管道
你可以通过调用Pipe.open()方法打开一个管道,像下面这样:
Pipe pipe = Pipe.open();
写入一个管道
为了写入一个管道...
分类:
编程语言 时间:
2016-04-17 23:12:06
阅读次数:
215
A file's status is 3-valued: So !Files.exists(path) != Files.notExists(path). If both exists and notExists return false, the existence of the file can ...
分类:
编程语言 时间:
2016-04-14 11:49:41
阅读次数:
262
面向流与面向缓冲 IO是面向流的,NIO是面向缓冲区的。 Java IO面向流意味着每次从流中读一个或多个字节,直至读取所有字节,它们没有被缓存在任何地方。 此外,它不能前后移动流中的数据。如果需要前后移动从流中读取的数据,需要先将它缓存到一个缓冲区。 Java NIO的缓冲导向方法略有不同。数据读 ...
分类:
其他好文 时间:
2016-04-11 20:24:30
阅读次数:
120
简介Apache MINA(Multipurpose Infrastructure 多功能框架 for Network Applications) 是 Apache 组织一个较新的项目,它为开发高性能和高可用性的网络应用程序提供了非常便利的框架。当前发行的 MINA 版本支持基于 Java NIO ... ...
分类:
移动开发 时间:
2016-04-10 21:21:28
阅读次数:
505
当学习了Java NIO和IO的API后,一个问题马上涌入脑海:
我应该何时使用IO,何时使用NIO呢?在本文中,我会尽量清晰地解析Java NIO和IO的差异、它们的使用场景,以及它们如何影响您的代码设计。
Java NIO和IO的主要区别
下表总结了Java NIO和IO之间的主要差别,我会更详细地描述表中每部分的差异。
IO...
分类:
编程语言 时间:
2016-04-10 14:47:01
阅读次数:
209