博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaNIO学习(与IO比较)
阅读量:2386 次
发布时间:2019-05-10

本文共 951 字,大约阅读时间需要 3 分钟。

  • Java NIO提供了与标准IO不同的IO工作方式

Channels and Buffers(通道和缓冲区):标准的IO基于字节流和字符流进行操作的,而NIO是基于通道(Channel)和缓冲区(Buffer)进行操作,数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道中。

Asynchronous IO(异步IO):Java NIO可以让你异步的使用IO,例如:当线程从通道读取数据到缓冲区时,线程还是可以进行其他事情。当数据被写入到缓冲区时,线程可以继续处理它。从缓冲区写入通道也类似。

Selectors(选择器):Java NIO引入了选择器的概念,选择器用于监听多个通道的事件(比如:连接打开,数据到达)。因此,单个的线程可以监听多个数据通道。

  • 区别:

IO是面向流的,NIO是面向缓冲区的

Java IO的各种流逝阻塞的,Java NIO是费阻塞的

  • NIO的三个部分

1.channel:通道,数据的读取和写入都可以通过它来完成。

2.selector :选择器,用于选择注册在通道中的已发生的事件。

3.ByteBuffer:一个新的缓冲区,通过这个类我们可以在通道中做写操作和读操作;主要是通过position、limit、和capacity指针的位置来进行操作。

  • 为什么要使用JavaNIO

NIO的创建目的是为了让Java程序员可以实现高速I/O而无需编写自定义的本机代码。NIO将最耗时的I/O操作(即填充和提取缓冲区)转移回操作系统,因而可以极大地提高速度。

原来的I/O库(在java.io.*中)与NIO最重要的区别是数据打包和传输的方式。原来的I/O 以流的方式处理数据,而NIO以块的方式处理数据。

面向流的I/O系统一次一个字节地处理数据。一个输入流产生一个字节的数据,一个输出流消费一个字节的数据。为流式数据创建过滤器非常容易。链接几个过滤器,以便每个过滤器只负责单个复杂处理机制的一部分,这样也是相对简单的。不利的一面是,面向流的I/O 通常相当慢。

一个面向块的I/O系统以块的形式处理数据。每一个操作都在一步中产生或者消费一个数据块。按块处理数据比按(流式的)字节处理数据要快得多。但是面向块的I/O缺少一些面向流的I/O所具有的优雅性和简单性。

  • 参考地址

转载地址:http://biiab.baihongyu.com/

你可能感兴趣的文章
写给换工作和找工作的同学
查看>>
Island Hopping the SpiderLabs Way
查看>>
Top Ten Web Protection Techniques of 2011
查看>>
Faster Blind MySQL Injection Using Bit Shifting
查看>>
Safely Dumping Hashes from Live Domain Controllers
查看>>
OWASP Top 10 penetration testing software
查看>>
java集成的构造方法
查看>>
Current O2 support for analyzing Spring MVC
查看>>
McAfee Web Gateway And Squid Proxy 3.1.19 Bypass
查看>>
PhpMyAdmin setup.php RFI Attacks Detected
查看>>
XSS Shortening Cheatsheet
查看>>
Application Security Logging
查看>>
FCKeditor本地test.html
查看>>
Hijacking SSH Agents
查看>>
PHP CGI Argument Injection
查看>>
sgx模拟器
查看>>
SGX相关资源
查看>>
nessus 购买地址
查看>>
Apache Kafka desrialization vulnerability via runtime
查看>>
It Takes Two to Tango (myself, and your unprotected file share)
查看>>