Abh*_*ary 37 java nio java.nio.file
我正在学习java nio包,我意识到文件已经提供了很多方法,nio.Files再次使用Path类提供这些方法.就像我得到的那么多.我实际上没有得到nio包的实际用途.
我对这个软件包很新,所以可能我的问题是错的,但是一点帮助可以促使我进一步阅读.
vsi*_*ngh 14
Java编程,I/O直到最近才使用流隐喻进行.所有I/O都被视为单个字节的移动,一次一个,通过一个称为Stream的对象.流I/O用于联系外部世界.它也在内部使用,用于将对象转换为字节,然后再转换回对象.
NIO与原始I/O具有相同的作用和目的,但它使用了不同的隐喻 - 块I/O. java.nio(新的/非阻塞的I/O))API是随JDK1.4引入的.
流I/O和块I/O有什么区别?
面向流的I/O系统一次处理一个字节的数据.输入流产生一个字节的数据,输出流消耗一个字节的数据.为流数据创建过滤器非常容易.将几个过滤器链接在一起也是相对简单的,这样每个过滤器就可以完成一个相当于单一,复杂的处理机制的部分.另一方面,面向流的I/O通常相当慢.
面向块的I/O系统处理块中的数据.每个操作一步生成或消耗一个数据块.通过块处理数据比通过(流)字节处理数据快得多.但是面向块的I/O缺乏面向流的I/O的优雅和简单性.
什么时候应该使用java.io,什么时候应该更喜欢java.nio?
可扩展性可能会推动您选择的包.java.net每个socket需要一个线程.编码将更加容易.java.nio效率更高,但很难编码.
处理成千上万的连接后,您可以获得更好的可扩展性,但是数量越少,阻塞IO的吞吐量就越高.
使用SSL时,java.nio不是一件易于处理的事情
重要提示:如果您正在使用其中任何一个软件包,那么从头开始创建框架并不是一个好主意,除非您有令人信服的理由这样做.
对于java.nio,Grizzly和Quick Server等项目提供可重用的非阻塞服务器组件.
值得阅读java.nio的痛点
最后,它归结为您的项目的具体要求以及您要实现的目标.一些最好的解决方案可能不需要最复杂的基础设施
更新:最近发现了自jdk 1.7以来存在的NIO.2软件包.NIO.2与NIO不同,主要是NIO.2提供异步通道功能.NIO.2引物
如果你正在与NIO合作,值得通过差异,哪一个适合你的目的.
Java NIO:通道和缓冲区
在标准IO API中,您可以使用字节流和字符流。在NIO中,您可以使用通道和缓冲区。数据总是从通道读取到缓冲区中,或从缓冲区写入到通道中。
Java NIO:非阻塞IO
Java NIO使您可以执行非阻塞IO。例如,线程可以要求通道将数据读入缓冲区。当通道将数据读入缓冲区时,线程可以执行其他操作。一旦将数据读入缓冲区,线程就可以继续对其进行处理。将数据写入通道时也是如此。
Java NIO:选择器
Java NIO包含“选择器”的概念。选择器是一个对象,可以监视多个通道的事件(例如:打开连接,到达数据等)。因此,单个线程可以监视多个通道以获取数据。
关于orcale的更多细节
| 归档时间: |
|
| 查看次数: |
30145 次 |
| 最近记录: |