`
hongsoft
  • 浏览: 290137 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

学习java i/o库要掌握的三个关键知识点

阅读更多
?

java i/o库要掌握的三个关键知识点

大家讨论java i/o库很久了, PaleSting也刚发了<<初级 Java I/O 综述>>系列文章,但我估计还是有些读者会觉得java i/o库难以琢磨,所以也来凑凑热闹,说说我认为的学习java i/o库要掌握的三个关键知识点。<!----><o:p></o:p>

知识点一: 四大等级结构<o:p></o:p>

java语言的i/o库提供了四大等级结构:InputStream,OutputStream,Reader,Writer四个系列的类。InputStream和OutputStream处理8位字节流数据, Reader和Writer处理16位的字符流数据。InputStream和Reader处理输入, OutputStream和Writer处理输出。大家一定要到J2SE文档中看看这四大等级结构的类继承体系。<o:p></o:p>

除了这四大系列类,i/o库还提供了少数的辅助类,其中比较重要的是InputStreamReader和OutputStreamWriter。InputStreamReader把InputStream适配为Reader, OutputStreamWriter把OutputStream适配为Writer;这样就架起了字节流处理类和字符流处理类间的桥梁。<o:p></o:p>

您使用i/o库时,只要按以上的规则,到相应的类体系中寻找您需要的类即可。<o:p></o:p>

知识点二: 适配功能<o:p></o:p>

java i/o库中的继承不是普通的继承;它的继承模式分为两种,其一就是Adapter模式(具体分析请参见<<java与模式>>一书) 。下面以InputStream类体系为例进行说明。<o:p></o:p>

InputStream有7个直接子类:ByteArrayInputStream,FileInputStream,PipedInputStream,StringBufferInputStream,FilterInputStream,ObjectInputStreamSequenceInputStream。前四个采用了Adapter模式,如FileInputStream部分代码如下:<o:p></o:p>

Public class FileInputStream extends InputStream

{

??? /* File Descriptor - handle to the open file */

??? private FileDescriptor fd;

??? public FileInputStream(FileDescriptor fdObj)

?{

?? ? SecurityManager security = System.getSecurityManager();

?? ? if (fdObj == null) {

?? ??? throw new NullPointerException();

?? ? }

?? ? if (security != null) {

?? ??? security.checkRead(fdObj);

?? ? }

?? ??? fd = fdObj;

?}

?//其他代码

}

可见,FileInputStream继承了InputStream,组合了FileDescriptor,采用的是对象Adapter模式。我们学习i/o库时,主要应该掌握这四个对象Adapter模式的适配源: ByteArrayInputStream的适配源是Byte数组, FileInputStream的适配源是File对象, PipedInputStream的适配源是PipedOutputStream对象, StringBufferInputStream的适配源是String对象。其它三个系列类的学习方法与此相同。<o:p></o:p>

知识点三: Decorator功能<o:p></o:p>

InputStream的其它三个直接子类采用的是Decorator模式,<<java与模式>>中描述得比较清楚,其实我们不用管它采用什么模式,看看代码就明白了。 FilterInputStream部分代码如下:<o:p></o:p>

Public class FilterInputStream extends InputStream {

??? /**

???? * The input stream to be filtered.

???? */

??? protected InputStream in;

??? protected FilterInputStream(InputStream in) {

?? ???? this.in = in;

??? }

??? //其它代码

}

?看清楚没有? FilterInputStream继承了InputStream,也引用了InputStream,而它有四个子类,这就是所谓的Decorator模式。我们暂时可以不管为什么要用Decorator模式,但我们现在应该知道:因为InputStream还有其它的几个子类,所以我们可以将其它子类作为参数来构造FilterInputStream对象!这是我们开发时常用的功能,代码示例如下:

{

//从密钥文件中读密钥

?? SecretKey key=null;??

?? ObjectInputStream keyFile=new ObjectInputStream(

??????? new FileInputStream("c:\\安全文件\\对称密钥\\yhb.des"));

??? key=(SecretKey)keyFile.readObject();

??? keyFile.close();

?? }

?上面的代码中, ObjectInputStream也是InputStream的子类,也使用了Decorator功能,不过,就算你不懂也不想懂Decorator模式,只要记住本文给出的FilterInputStream 的两段代码即可<o:p></o:p>

掌握了以上三点,相信我们已经能够很好的应用java i/o库。

?

hongbo781202,又名HongSoft,职业程序员,研究领域:1)基于工作流的BPM系统研究2)基于JAVA的信息安全

技术.欢迎和大家讨论JAVA相关各方面技术和市场问题 hongbosoftware@163.com

分享到:
评论

相关推荐

    java I/O内容

    这是一个关于Java I/O的知识点总结,希望大家共同学习,共同进步

    Java I/O 第二版

    OReilly.Java.I.O.2nd.Edition.May.2006 Java的io包主要包括: 1. 两种流:字节流(byte Stream)和字符流(character stream),这两种流不存在所谓的谁代替谁、谁比谁高级之说,它们互为补充,只是侧重点不同...

    Java I/O, 2nd Edition

    Java I/O, 2nd Edition

    Java IO, NIO and NIO.2(Apress,2015)

    Java I/O, NIO, and NIO.2 is a power-packed book that accelerates your mastery of Java's various I/O APIs. In this book, you'll learn about classic I/O APIs (File, RandomAccessFile, the stream classes ...

    java中I/O资源学习记录IO.md

    平常学习的时候,java中的I/O流中的知识比较的杂乱,但是有时候需要用到,因此特意整理了下,这在进行分享的

    java基础知识I/O流使用详解

    编程语言的I/O类库中常常使用流这个抽象的概念,它代表任何有能力产生数据的数据源对象或时有能力接收数据的接收端对象,本文为大家介绍Java中I/O系统基础知识

    java7 新I/O知识点详解

    在本篇文章里小编给大家整理的是关于java7 新I/O知识点详解,有需要的朋友们可以学习下。

    java入门学习视频--java入门学习视频

    java入门学习视频 java一些基础性的知识 数组集合 I/o流等等 java入门学习视频 java一些基础性的知识 数组集合 I/o流等等

    【Java学习+面试指南】 一份涵盖大部分Java程序员所需要掌握的核心知识.rar

    【Java学习+面试指南】 一份涵盖大部分Java程序员所需要掌握的核心知识。 介绍 对于 Java 初学者来说: 本文档倾向于给你提供一个比较详细的学习路径,让你对于Java整体的知识体系有一个初步认识。另外,本文的...

    学习Android所需的Java知识点列表

    学习Android所需的Java知识点列表

    java GUI 图形界面

    java GUI 学习java比用的东西

    java之路,主要是java中的学习过程与基础项目.rar

    最开始要学习的是 Java 基础,学习了这部分,就会对 Java 语言有一个初步的了解。其实大部分语言的基础知识都是大同小异,如果之前已经学习过其他语言如C、C++,那学习这部分会更快。 这部分主要学习的内容有:基本...

    Java进阶知识点总结

    学习过程中做的笔记,适合初学者。包括面向对象、封装、继承、多态、集合、I/O流、线程、泛型、异常和一些关键字的简单介绍

    Java IO.pdf

    Java IO.pdf

    企业知识库管理系统(java源码)

    java实现,整个项目源码,包括企业知识库管理的各个模块

    全国计算机二级java题库

    二级java 公共基础知识部分30分 专业语言部分 70分 Java语言程序设计 基本要求: 1. 掌握Java语言的特点,实现机制和体系结构。 2. 掌握Java语言中面向对象的特性。 3. 掌握Java语言提供的数据类型和结构。 4. 掌握...

    新输入输出(NIO)

    JDK 1.4 中引入的新输入输出 (NIO) 库在标准 ...您将学到诸如缓冲区和通道这样的关键 I/O 元素的知识,并考察更新后的库中的标准 I/O 是如何工作的。您还将了解只能通过 NIO 来完成的工作,如异步 I/O 和直接缓冲区。

    com.sun.media.jai等文件转换jar

    Java中进行图像I/O(即读图片和写图片,不涉及到复杂图像处理)有三个方法: Java Image I/O API,支持常见图片,从Java 2 version 1.4.0开始就内置了。 主页:...

Global site tag (gtag.js) - Google Analytics