欢迎来到天天文库
浏览记录
ID:6074930
大小:48.98 KB
页数:8页
时间:2018-01-02
《java nio和socket的区别》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、本文并非Java.io或Java.nio的使用手册,也不是如何使用Java.io与Java.nio的技术文档。这里只是尝试比较这两个包,用最简单的方式突出它们的区别和各自的特性。Java.nio提出了新的流(stream)通讯概念并且加入了新的缓冲、文件流以及socket(套接字)特性。java.io概览这个包通过数据流和序列化机制来实现系统输入和输出。并且支持多种类型的数据流,包括简单的字节、原生数据类型、地区字符以及对象。流是一个数据的序列:一个程序使用输入流从一个源头读取数据;这些程序都使用字节流来执行字节的输入和输出。所有涉及字节流的类都是继承自InputStre
2、am和OutputStream。关于InputStream和OutputStream执行InputStream和OutputStream的操作一般都意味着不断循环的将字节逐一从输入流读出或写入到输出流。你可以使用缓冲I/O流来降低I/O成本(凡是I/O请求都经常触发磁盘访问、网络动作或其他一些成本昂贵的操作)。缓冲输入流则是从缓冲的内存区域读取数据,只有缓冲读完才会调用nativeinputAPI(不同操作系统提供的本地输入流API——译者注)。同样的,缓冲输出流也将数据写入缓冲,只有缓冲写满才会调用nativeoutputAPI。这些带缓冲的API很好的封装了未缓冲的流
3、操作:BufferedInputStream和BufferedOutputStream.FileI/O上面一节主要是针对数据流,它提供一种数据读取和写入的简单模型。真实的数据流其实是涉及种类繁多的数据源和目的地,包括磁盘文件。但是,数据流并不支持所有磁盘文件操作。下面的链接介绍了非数据流的文件I/O:·File 类可以编写平台无关的检查和处理文件、目录的代码。·Randomaccessfiles支持非序列化的磁盘文件数据访问。java.netsocket两个在网络上运行的程序之间会建立双向通讯的链接,socket就是其中一个端点。Socket相关的类代表着客户端程序和服务
4、端程序之间的连接。java.net包提供了两个类:Socket和ServerSocket。它们分别实现了连接的客户端和服务端。客户端知道服务端运行机器的域名,以及服务器监听的端口,它尝试连接到服务器,如果一切正常,服务器接受并建立连接。当接受连接时,服务器在监听端口上绑定一个新的socket,并且通知远程端点设置客户端的地址和端口。之所以要建立一个新的socket是为了处理已连接客户端请求的同时还能继续监听原始socket上的连接请求。服务器使用阻塞模式等待客户端连接:serverSocket.accept()是一个阻塞指令,当服务器等待接受连接时主线程不能做任何其他操作
5、。由于这个原因,服务器想要达到多任务处理就只能通过实现一个多线程服务器:每当新建一个socket时就必须为它创建一个新线程。NIOAPII/O性能经常是一个现代应用的痛处。操作系统持续优化改进I/O性能,JVM也提供了一套运行环境帮助Java程序员规避了绝大多数操作系统I/O之间的差异。这些都让I/O相关编码更加高效和简单,但是却隐藏了操作系统的功能特性。想要增强I/O性能,其实你可以通过一些特殊的编码直接访问操作系统的底层功能,但是这并不是最佳解决方案——你的代码将必须依赖某个操作系统。Java.nio包应运而生来解决这个难题,它提供了高性能的I/O特性,并支持当今大多
6、数常用的商用操作系统。JDK1.4的NIO包介绍了一系列新的I/O操作的抽象概念。java.nio概览Java.nio这个新增的包实现了Java平台新的I/OAPI。NIOAPI包含如下特性:·原生类型数据缓冲·字符集的编码器和解码器·基于Perl风格正则表达式的模式匹配·通道(Channel),一种新的原生I/O抽象概念·支持锁和内存映射的文件接口·通过多路复用、非阻塞的I/O能力实现可伸缩的服务器架构在SUN(现Oracle)的站点上可以找到java.nio的详细技术文档。这里我将解释一些nio的概念,并且和老的java.io库做下比较。建议不要把java.nio当作
7、java.io的替代品,即使它是java.io的“扩展”。Nio的诞生导致了整个I/O类和接口的重新修订(详情请看)。NIO中一个最重要的概念是在非阻塞模式下运行,与传统JavaI/O类库完全不同。什么是非阻塞模式?Nonblockingmode非阻塞模式一个I/O流的字节必须序列化的访问。各种设备,打印机端口、网络连接等都是常见的例子。数据流通常比阻塞式设备慢,而且经常断断续续。大多数操作系统允许将数据流设置为非阻塞模式,允许进程检查是否流上是否有可用数据,即使没有也不会导致进程阻塞。这种机制能让进程在输入流空闲等待时执行其
此文档下载收益归作者所有