`
xvm03
  • 浏览: 144471 次
  • 来自: ...
社区版块
存档分类
最新评论

java的IO总结

阅读更多

 

知识点一: 四大等级结构

 

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模式(具体分析请参见<<java与模式>>一书) 。下面以InputStream类体系为例进行说明。

InputStream有7个直接子类:ByteArrayInputStream,FileInputStream,PipedInputStream,StringBufferInputStream,FilterInputStream,ObjectInputStream和SequenceInputStream。前四个采用了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模式,<<java与模式>>中描述得比较清楚,其实我们不用管它采用什么模式,看看代码就明白了。 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库。

 

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论
1 楼 dsjt 2010-05-24  
看起来都像装饰模式呢 !!

相关推荐

    JavaIO总结

    有关Java输入输出流的总结有关Java输入输出流的总结有关Java输入输出流的总结

    JavaIO总结.pdf

    Java IO总结 Java IO是Java中对文件的操作方式,以流的方式进行。流是Java内存中的一组有序数据序列。Java将数据从源(文件、内存、键盘、网络)读入到内存中,形成了流,然后将这些流还可以写到另外的目的地(文件...

    Java io流总结

    Java io流的总结

    JavaIO总结[借鉴].pdf

    JavaIO总结[借鉴].pdf

    IO总结处理

    javaIO总结,帮助初学者了解及掌握IO,以及java高级的一些基础知识

    JavaIO总结思维导图

    java基础中的IO流部分的总结,有详细的知识点描述,思维导图的整体框架

    Java_IO完全总结

    Java IO系统主要包括两个包:`java.io`和`java.nio`(New IO),其中`java.io`提供了一系列基于流的I/O操作接口与实现类,而`java.nio`则提供了更高效的数据访问方式,如通道和缓冲区等。 Java IO系统的设计原则之...

    JAVA_IO流学习总结

    JAVA_IO流学习总结

    Java IO流 总结

    Java IO流总结 Java IO流是Java语言中最基本和最重要的输入/输出机制,负责将数据从外部世界输入到Java应用程序中或将数据从Java应用程序输出到外部世界。IO流可以分为两大类:字节流和字符流。 1. 节点流:离数据...

    java IO.chm

    这篇详细的总结将围绕Java IO体系结构、核心类、流的概念、缓冲区、转换流、字符集、文件操作、对象序列化以及NIO(非阻塞IO)等多个方面进行展开。 一、Java IO体系结构 Java IO体系是Java平台中用于处理数据输入...

    JAVAIO流学习总结(转)

    这是别人总结的很有实用价值的javaIO流教程。

    JavaIO流详细总结

    下面是对Java IO流的详细总结: 1. 流的概念: 流是一种抽象的数据传输方式,可以将数据从一个地方传输到另一个地方。Java中的流分为输入流和输出流,分别用于读取和写入数据。流按照处理数据的不同类型,又可以...

    Java IO_NIO

    总结来说,Java NIO提供了一种更高效、更适合处理并发的IO模型,尤其在服务器端开发中,如高并发的网络应用,NIO的优势更为明显。理解和掌握Java IO与NIO的使用,对于提升Java应用程序的性能和可扩展性至关重要。

    《JAVA_IO流学习总结》

    总结来说,Java IO流是一个庞大的体系,覆盖了从基础的文件操作到复杂的网络通信,理解并熟练掌握这一部分将极大地提升Java开发者的技能。通过学习和实践,开发者可以灵活地处理各种数据输入输出场景,为应用程序...

    java io 详解

    #### 五、Java IO总结 Java IO是一个强大的框架,它支持各种不同的流类型,包括字节流和字符流。通过使用装饰模式,开发人员可以轻松地扩展流的功能,而无需修改原始流的实现。这种灵活性使得Java IO成为处理文件和...

    javaIO流知识大总结

    在这个大总结中,我们将深入探讨Java IO流的基本概念、分类、常用类以及实践应用。 1. **基本概念** - **流(Stream)**:在Java中,流是一个抽象的概念,代表数据的有序序列。它可以是字节流或字符流,流向可以是...

    Java学习之IO总结及mina和netty

    这篇博客“Java学习之IO总结及mina和netty”探讨了Java IO的基础知识,并深入到两个高级网络通信框架——Mina和Netty。Mina和Netty都是基于NIO(非阻塞IO)的高性能网络应用框架,它们简化了复杂网络编程的实现。 *...

Global site tag (gtag.js) - Google Analytics