电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

JavaNIO与IO的区别和比较

JavaNIO与IO的区别和比较_第1页
1/10
JavaNIO与IO的区别和比较_第2页
2/10
JavaNIO与IO的区别和比较_第3页
3/10
Java NIO 与 IO 的区别和比较 导读 J2SE1.4 以上版本中发布了全新的I/O 类库。本文将通过一些实例来简单介绍NIO 库提供的一些新特性:非阻塞I/O,字符转换,缓冲以及通道。 一 . 介绍NIO NIO 包(java.nio.*)引入了四个关键的抽象数据类型,它们共同解决传统的I/O 类中的一些问题。 1. Buffer:它是包含数据且用于读写的线形表结构。其中还提供了一个特殊类用于内存映射文件的I/O操作。 2. Charset:它提供Unicode 字符串影射到字节序列以及逆影射的操作。 3. Channels:包含socket, file 和 pipe 三种管道,它实际上是双向交流的通道。 4. Selector:它将多元异步I/O 操作集中到一个或多个线程中(它可以被看成是Unix 中 select()函数或Win32 中 WaitForSingleEvent()函数的面向对象版本)。 二 . 回顾传统 在介绍NIO 之前,有必要了解传统的I/O 操作的方式。以网络应用为例,传统方式需要监听一个ServerSocket,接受请求的连接为其提供服务(服务通常包括了处理请求并发送响应)图一是服务器的生命周期图,其中标有粗黑线条的部分表明会发生I/O 阻塞。 图一 可以分析创建服务器的每个具体步骤。首先创建ServerSocket ServerSocket server=new ServerSocket( 10000); 然后接受新的连接请求 Socket newConnection=server.accept(); 对于accept 方法的调用将造成阻塞,直到ServerSocket 接受到一个连接请求为止。一旦连接请求被接受,服务器可以读客户socket 中的请求。 InputStream in = newConnection.getInputStream(); InputStreamReader reader = new InputStreamReader(in); BufferedReader buffer = new BufferedReader(reader); Request request = new Request(); while(!request.isComplete()) { String line = buffer.readLine(); request.addLine(line); } 这样的操作有两个问题,首先BufferedReader 类的readLine()方法在其缓冲区未满时会造成线程阻塞,只有一定数据填满了缓冲区或者客户关闭了套接字,方法才会返回。其次,它回产生大量的垃圾,BufferedReader 创建了缓冲区来从客户套接字读入数据,但是同样创建了一些字符串存储这些数据。虽然BufferedReader 内部提供了StringBuffer 处理这一问题,但是所有的String 很快变成了垃圾需要回收。 同样的问题在发送响应代码中也存在 Response response = request.genera...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

JavaNIO与IO的区别和比较

确认删除?
VIP
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群
客服邮箱
回到顶部