夕下奕林的专栏

Java中的IO分为两个部分,以InputStream和Reader为基类的输入类,以OutputStream和Writer为基类的输出类。其中InputStream和OutputStream以字节为单位进行IO,而Reader和Writer以字符为单位。

除了输入输出,还有一系列类库称为Filter,或成为装饰器。对于输入可用FilterInputStream和FilterReader的派生类,输出可用FilterOutputStream和FilterWriter的派生类,其中FilterInputStream和FilterOutputStream以字节为单位,FilterReader和FilterWriter以字符为单位。

还有一个独立与InputStream和OutputStream的—RandomAccessFile,用于对文件的读写,有点类似与C语言中的fopen()

所以可以总结,所有以Stream结尾的都是以字节为单位,也成为流;以Reader或Writer结尾的都以字符为单位。Reader和Writer在java1.1中才出现,如果需要进行转换,可以使用InputStreamReader和OutputStreamWriter。

过滤器(Filter)

Filter是对输入或输出进行一定的控制,如缓存、读取或写入基本数据类型等,用于更改流的一些行为。

FilterInputStream的派生类:

FilterOutputStream的派生类:

Reader和Writer中所用的Filter与InputStream和OutputStream中的Filter对比:

对于Filter的具体使用将在具体综合例子中讲到。

输入

输入分为输入字节和输入字符,分别使用基类是InputStream和Reader,如果需要把InputStrema转化为Reader,可以使用InputStreamReader。以下是一些InputStream常用的派生类与Writer与之对应的派生类。

InputStream派生类:

Reader与之对应的派生类:

将InputStream转成Reader示例:

// 创建一个InputStream类型的对象InputStream in = new FileInputStream(“data.txt”);// InputStreamReader继承自Reader,其构造方法接受一个InputStream对象Reader reader = new InputStreamReader(in);输出

输出分为输出字节和输出字符,分别使用基类是OutputStream和Writer,如果需要把OutputStrema转化为Writer,可以使用OutputStreamWriter。以下是一些OutputStream常用的派生类与Writer与之对应的派生类。

OutputStream派生类:

Writer与之对应的派生类:

将OutputStream转成Writer示例:

// 创建一个OutputStream类型的对象OutputStream out=new FileOutputStream(“data.txt”);// OutputStreamWriter继承自Writer,其构造方法接受一个OutputStream对象Writer writer=new OutputStreamWriter(out);综合示例

1、打开一个文件,并把其中的内容逐行输出的屏幕上。为了提高效率,这里将使用第一种过滤器BufferedReader,能够对输入进行缓冲。

public class Read {(String[]args) throws Exception{String file=”data.txt”;read(file);}(String file) throws Exception{BufferedReader in=new BufferedReader(new FileReader(file));String s;while((s=in.readLine())!=null)System.out.println(s);in.close();}}

2、从文件中按字节读取内容,需要用到DataInputStream过滤器,由于这里要对字节进行操作,所以要使用InputStream而不是Reader。其中对是否是用BufferedStream进行效率比较。

import java.io.*;public class ReadByte {(String[] args) throws Exception {String file = “data.txt”;long start;start = System.currentTimeMillis();// 记录运行开始时间readWithBufferedInputStream(file);System.out.println(“readWithBufferedInputStream use time:”+ (System.currentTimeMillis() – start));// 运行结束时间-开始时间就是运行时间start = System.currentTimeMillis();readWithoutBufferedInputStream(file);System.out.println(“readWithoutBufferedInputStream use time:”+ (System.currentTimeMillis() – start));}(String file)throws Exception {// 用BufferedInputStream进行读取文件DataInputStream in = new DataInputStream(new BufferedInputStream(new FileInputStream(file)));while (in.available() != 0)// DataInputStream剩余的字符数不为零则表示还没输出结束in.readByte();in.close();}(String file)throws Exception {// 不用BufferedInputStream读取文件DataInputStream in = new DataInputStream(new FileInputStream(file));while (in.available() != 0)in.readByte();in.close();}}因为有了梦想,我们才能拥有奋斗的目标,

夕下奕林的专栏

相关文章:

你感兴趣的文章:

标签云: