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

原创 2004年05月31日 16:47:00
?

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

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

知识点一: 四大等级结构

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

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

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

知识点二: 适配功能

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

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

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对象。其它三个系列类的学习方法与此相同。

知识点三: Decorator功能

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

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 的两段代码即可

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

?

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

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

版权声明:本文为博主原创文章,未经博主允许不得转载。

Java I/O流系统学习心得

1.Java I/O系统概论 由于数据输入和接受端的多样性以及与他们通信方式的多样性(你可能需要按字节,按字符,顺序或随机地获得它们)存在,一个优秀的I/O系统对每门语言来说都是一个巨大挑战。Java...
  • linmoops
  • linmoops
  • 2016年07月29日 16:18
  • 354

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

Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=13141 大家讨论java i/o库很久了, PaleSting也刚发了>系列文章...
  • bohu83
  • bohu83
  • 2016年04月11日 18:22
  • 217

Java I/O学习(附实例和详解)

原文地址:http://blog.csdn.net/u013142781/article/details/50814649 一、Java I/O类结构以及流的基本概念 在阅读Java I/O的...
  • tuzongxun
  • tuzongxun
  • 2016年03月08日 18:10
  • 708

学习JavaScript你必须掌握的8大知识点!

一、JavaScript思维导图之的学习 二、    JavaScript思维导图之  三、JavaScript思维导图之 四、JavaScript思维导图之...
  • u011313703
  • u011313703
  • 2017年04月06日 17:59
  • 1188

《JAVA I/O最详解》

刚开始学Java时候,一直搞不懂Java里面的io关系,在网上找了很多大多都是给个结构图草草描述也看的不是很懂。而且没有结合到java7 的最新技术,所以自己结合API来整理一下,有错的话请指正,...
  • self_realian
  • self_realian
  • 2016年07月19日 17:31
  • 1787

文件I/O和标准I/O的区别

一、先来了解下什么是文件I/O和标准I/O: 文件I/O:文件I/O称之为不带缓存的IO(unbuffered I/O)。不带缓存指的是每个read,write都调用内核中的一个系统调用。也就是一般所...
  • zqixiao_09
  • zqixiao_09
  • 2016年01月01日 10:12
  • 2339

Java I/O流类库总结

Java中的I/O输入和输出 1、流:代表任何有能力产出数据和数据源对象,或者有能力接收数据的数据端对象(流概念屏蔽了I/O设备中处理数据的底层细节); 2、Java类库中...
  • Al_assad
  • Al_assad
  • 2016年10月31日 23:31
  • 304

NodeJS学习笔记(一)——异步I/O的理解

操作系统对I/O的操作分为阻塞I/O和非阻塞I/O。阻塞I/O造成了CPU的等待,使CPU不能得到充分的利用;而非阻塞I/O虽然不必等待完整I/O的返回,但需要通过轮询重复的调用判断操作,这种判断操作...
  • Jacie_chaochao
  • Jacie_chaochao
  • 2015年11月30日 21:47
  • 1463

深入理解 java I/O

Java 的 I/O 类库的基本架构 I/O 问题是任何编程语言都无法回避的问题,可以说 I/O 问题是整个人机交互的核心问题,因为 I/O 是机器获取和交换信息的主要渠道。在当今这个数据大爆炸...
  • Mr_Tim
  • Mr_Tim
  • 2016年04月06日 11:42
  • 841

Java I/O 模型的演进

什么是同步?什么是异步?阻塞和非阻塞又有什么区别?本文先从 Unix 的 I/O 模型讲起,介绍了5种常见的 I/O 模型。而后再引出 Java 的 I/O 模型的演进过程,并用实例说明如何选择合适的...
  • kkkloveyou
  • kkkloveyou
  • 2016年03月01日 21:17
  • 1448
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:学习java i/o库要掌握的三个关键知识点
举报原因:
原因补充:

(最多只允许输入30个字)