当前位置:天才代写 > tutorial > JAVA 教程 > Java IO系统总结

Java IO系统总结

2017-11-02 08:00 星期四 所属: JAVA 教程 浏览:53

副标题#e#

1 Java IO版本

Java库的IO分为输入/输出两部门。

早期的Java 1.0版本的输入系统是InputStream及其子类,输出系统是OutputStream及其子类。

厥后的Java 1.1版本对IO系统举办了从头设计。输入系统是Reader及其子类,输出系统是Writer及其子类。

Java1.1之所以要从头设计,主要是为了添加国际化支持(即添加了对16位Unicode码的支持)。详细表示为Java 1.0的IO系统是字节约,而Java 1.1的IO系统是字符流。

字节约,就是数据流中最小的数据单位是8位的字节。

字符流,就是数据流中最小的数据单位是16位的字符。

字节约在操纵的时候,不会用到缓冲;而字符流会用到缓冲。所以,字符流的效率会更高一些。

至于为什么用到缓冲会效率更高一些呢?那是因为,缓冲本质上是一段内存区域;而文件大多是存储在硬盘可能Nand Flash上面。读写内存的速度比读写硬盘或Nand Flash上文件的速度快许多!

今朝,文件大多以字节的方法存储的。所以在开拓中,字节约利用较为遍及。

2 Java 1.0和Java 1.1 的IO类的较量

表01_Java 1.0和Java 1.1的IO根基类比拟表

Java IO系统总结

表02_Java 1.0和Java 1.1的IO装饰器比拟表

Java IO系统总结

之所以将Java IO系统分为根基类和装饰器,是因为根基类主要是将流分为文件、字符串等差异种类,而装饰器是为了实现“Decorator模式”(参考 “4 Decorator模式”)。


#p#副标题#e#

3 Java 1.0 IO系统先容

因为Java 1.0与Java 1.1的IO系统的道理和利用要领都相似。所以,下面主要对Java 1.0的IO系统举办说明。

3.1输入流

InputStream是字节输入流的所有类的超类,它主要包罗以下几个常用的子类。

(01)ByteArrayInputStream

将Byte数组作为字节数组输入流利用。

(02)StringBufferInputStream

将字符串作为字符串输入流利用。已过期,不发起利用。

(03)FileInputStream

将文件或FileDescriptor作为文件输入流利用。建设该输入流时,通报的参数可以是“文件名”(String范例)、“File工具”或“FileDescriptor工具”(即可以是尺度输入流、输出流、错误流的句柄)。

(04)PipedInputString

提供要写入管道输出流的所有数据字节。建设该输入流的时候,可以指定对应的管道输出轮番;这样做的话,意味着将对应的管道输入流毗连到了管道输出流。

(05)FilterInputStream

它直接担任与InputStream,主要用于实现Decorator模式(这在后头举办说明)。

FilterInputStream主要有两个派生类“DataInputStream”和“BufferedInputStream”。DataInputStream提供了读取byte、char、int等根基范例和String的各类接口;BufferedInputStream提供了缓冲成果。

3.2输出流

OutputStream是字节输出流的所有类的超类,它主要包罗以下几个常用的子类。

(01)ByteArrayOutputStream

字节数组输出流,个中的数据被写入一个 byte 数组。缓冲区会跟着数据的不绝写入而自动增长。可利用 toByteArray()toString() 获取数据。

(02)FileOutputStream

文件输出流是用于将数据写入 FileFileDescriptor 的输出流。

 文件是否可用或可否可以被建设取决于基本平台。出格是某些平台一次只答允一个 FileOutputStream(或其他文件写入工具)打开文件举办写入。在这种环境下,假如所涉及的文件已经打开,则此类中的结构要领将失败。

(03)PipedOutputString

可以将管道输出流毗连到管道输入流来建设通信管道。管道输出流是管道的发送端。凡是,数据由某个线程写入 PipedOutputStream 工具,并由其他线程从毗连的 PipedInputStream读取。

 不发起对这两个工具实验利用单个线程,因为这样大概会造成该线程死锁。假如某个线程正从毗连的管道输入流中读取数据字节,但该线程不再处于勾当状态,则该管道被视为处于 破坏 状态。

(04)FilterOutputStream

它直接担任与OutputStream,主要用于实现Decorator模式(这在后头举办说明)。

FilterOutputStream主要有两个派生类“DataOutputStream”和“BufferedOutputStream”。DataOutputStream提供了写入byte、char、int等根基范例和String的各类接口;BufferedOutputStream提供了缓冲成果。

4 Decorator模式

Decorator,装饰模式,又称为Wrapper。它的主要成果在于动态扩展一个类的成果。

#p#分页标题#e#

JavaIO系统包罗“文件流”、“字符串流”、“字节约”、“缓冲流”等。如果,我们同时需要多种数据流的成果,如输入流缓和冲流。若回收担任的方法,数量太可观了。为了办理这一问题,Decorator模式实现了动态扩展,即在运行的时候动态的给一个类“装饰”上某些成果。好比:

InputStream input = newBufferedInputStream(new FileInputStream(“test.txt”));

这就是将FileInputStream装饰成了BufferedInputStream,使它具有了缓冲成果。

5 例子

package com.skywang;

import java.io.*;

public class IOTest{

  publicstatic voidmain(String[] args) throwsIOException {

      try {

           File f=newFile("d:123.txt");

           OutputStream out =

                new BufferedOutputStream(

                    new FileOutputStream(f));

           String str="helloskywang!";

         

          byte[]b=str.getBytes();

          for(int i = 0; i < b.length; i++) {

               out.write(b[i]);

           }

           out.close();

      }catch (FileNotFoundException e){

          e.printStackTrace();

      }catch (SecurityException e){

          e.printStackTrace();

      }

   }

}

查察本栏目

 

    关键字:


天才代写-代写联系方式