jdk 1.7系列(一) JAVA IO 简史

JAVA IO简史                                                      

Java之所以能够广泛流传,其强大、丰富、简明的类库功不可没,编程时要解决的大多数问题几乎都可以在其中找到支持。但经验丰富的Java开发人员都知道,在老版本的Java中,有些地方不是那么给力。曾经他们最崩溃的就是Java的输入/输出(I/O)API。

JAVA 1.0到1.3    

在Java早期版本(1.0 - 1.3)中没有完整的 I/O 支持。在开发时很可能面临以下问题:

  1. 没有数据缓冲区或者通道的概念,开发人员要编程处理很多底层细节
  2. I/O 操作会被阻塞,扩展能力受限
  3. 所支持的字符集编码有限,需要进行很多手工编码工作来支持特定类型的硬件
  4. 不支持正则表达式, 数据处理困难

Java 1.4 引入 NIO 

2002年发布Java 1.4时 非阻塞 I/O ( NIO ) 以JSR-51的身份加入到Java语言中。有以下特性:

  1. 为 I/O 操作抽象出缓冲区和通道层
  2. 字符集的编码和解码能力
  3. 提供了能够将文件映射为内存数据的接口
  4. 实现非阻塞 I/O 的能力
  5. 基于流行的 Perl 实现的正则表达式类库 ( Perl - 正则表达式之王 想了解可访问http://www.perl.org)

Java 1.7 NIO.2

NIO 无疑使Java向前迈出了一大步,但 I/O 变成对于文件系统中的文件和目录处理而言,支持力度仍然不够,java.io.File类中也还存在某些局限性,为了突破这些局限性,同时为了支持现代硬件和软件 I/O 新范例,

由阿兰-波特曼主导的JSR-203应运而生,最终变成了Java7中NIO.2 API。它有三个主要目标:

  1. 一个能批量获取文件属性的文件系统接口,去掉和特定文件系统相关的API,还有一个用于引入标准文件系统实现的服务提供者接口
  2. 提供一个套接字和文件都能够进行异步(与轮询、非阻塞相对) I/O操作的API
  3. 完成JSR-51中定义的套接字-通道功能,包括额外对绑定、选项配置和多播数据报的支持。

上面简单的介绍了Java从最初的 I/O 到 NIO 再到NIO.2的发展历程,后期会逐渐更新,如何使用java.nio包中的类去提升开发效率,博客仅作为学习交流使用,本人也是学习过程中,有不正确之处望各大博友指正,多谢支持。

原文地址:https://www.cnblogs.com/gudongcheng/p/9880111.html

时间: 2024-10-08 18:19:24

jdk 1.7系列(一) JAVA IO 简史的相关文章

JDK源码阅读(五)java.io.Serializable接口

package java.io; public interface Serializable { } (1)实现Serializable接口的类,将会被提示提供一个 serialVersionUID 注意点一.序列化时为了保持版本的兼容性,即在版本升级时反序列化仍保持对象的唯一性. 有两种生成方式:              ①一个是默认的1L,比如:private static final long serialVersionUID = 1L;              ②一个是根据类名.接口

Java IO流(第二讲):File类

File是基于磁盘操作的I/O,Java多数IO都是实行流式操作,但是File不是,它不会读取文件信息或者向文件存储,它是直接处理文件的,它不会读取文件信息或者向文件存储,File对象可以用来获取或处理与磁盘文件相关的信息,例如权限,时间,日期和目录路径.File类的名字比较欺骗性,它其实并不仅仅代表一个特定文件名字,也可以代表文件目录下一系列文件名,用File存储数据存在很大的安全性,但是文件仍是我们存储数据以及共享数据的主要工具. 下面我们来解读File类在Java中的运用方式. 首先,我们

JDK框架简析--java.io包中的输入输出类库

题记 JDK,Java Development Kit. 我们必须先认识到,JDK只是,仅仅是一套Java基础类库而已,是Sun公司开发的基础类库,仅此而已,JDK本身和我们自行书写总结的类库,从技术含量来说,还是在一个层级上,它们都是需要被编译成字节码,在JRE中运行的,JDK编译后的结果就是jre/lib下的rt.jar,我们学习使用它的目的是加深对Java的理解,提高我们的Java编码水平. 本系列所有文章基于的JDK版本都是1.7.16. 本节内容 Java IO库提供了一个可以称之为链

java io系列03之 ByteArrayOutputStream的简介,源码分析和示例(包括OutputStream)

前面学习ByteArrayInputStream,了解了“输入流”.接下来,我们学习与ByteArrayInputStream相对应的输出流,即ByteArrayOutputStream.本章,我们会先对ByteArrayOutputStream进行介绍,在了解了它的源码之后,再通过示例来掌握如何使用它. 转载请注明出处:http://www.cnblogs.com/skywang12345/p/io_03.html ByteArrayOutputStream 介绍 ByteArrayOutpu

给jdk写注释系列之jdk1.6容器(13)-总结篇之Java集合与数据结构

是的,这篇blogs是一个总结篇,最开始的时候我提到过,对于java容器或集合的学习也可以看做是对数据结构的学习与应用.在前面我们分析了很多的java容器,也接触了好多种常用的数据结构,今天我们就来总结下这些内容. 下面我们以数据结构的维度来总结下,在Java集合的实现过程中,底层到底使用了哪些常用的数据结构中,他们分别又有什么特点.      1. 数组(Array) 结构说明:在程序设计中,为了处理方便, 把具有相同类型的若干变量按有序的形式组织起来.这些按序排列的同类数据元素的集合称为数组

从Java IO到JDK的使用

入职一个月了,所在岗位并没有使用原来熟悉的C/C++语言,一边工作一边学习Java.最近由于项目要求,经常使用Java中的读写操作,对此有些心得体会在此整理成文,文中主要的思路:首先介绍IO基本功能,然后介绍怎么根据功能需要,选择具体的IO操作. 一.Java IO常用的类图及其基本功能: 查看Java JDK可以发现IO包中包含了以下8个基类: (图片来源:http://www.falkhausen.de/Java-8/java.io/index.html) 图1 Java.IO包结构 其中:

java io系列01之 "目录"

javaIO系列转载出处:http://www.cnblogs.com/skywang12345/p/io_01.html 该分类所有博文,均转载同一作者,后边不再累赘标名. java io 系列目录如下: 01. java io系列01之  "目录" 02. java io系列02之 ByteArrayInputStream的简介,源码分析和示例(包括InputStream) 03. java io系列03之 ByteArrayOutputStream的简介,源码分析和示例(包括Ou

java io系列02之 ByteArrayInputStream的简介,源码分析和示例(包括InputStream)

我们以ByteArrayInputStream,拉开对字节类型的“输入流”的学习序幕.本章,我们会先对ByteArrayInputStream进行介绍,然后深入了解一下它的源码,最后通过示例来掌握它的用法. 转载请注明出处:http://www.cnblogs.com/skywang12345/p/io_02.html ByteArrayInputStream 介绍 ByteArrayInputStream 是字节数组输入流.它继承于InputStream.它包含一个内部缓冲区,该缓冲区包含从流

java io系列07之 FileInputStream和FileOutputStream

本章介绍FileInputStream 和 FileOutputStream 转载请注明出处:http://www.cnblogs.com/skywang12345/p/io_07.html FileInputStream 和 FileOutputStream 介绍 FileInputStream 是文件输入流,它继承于InputStream.通常,我们使用FileInputStream从某个文件中获得输入字节.FileOutputStream 是文件输出流,它继承于OutputStream.通