IO流按照流向分为输入流和输出流。输入流读入数据,输出流写出数据。按照数据类型,又分为字节流和字符流。读取记事本中的纯文本可以采用字符流,其他时候一律使用字节流。IO流主要有四个抽象类,InputStream和OutputStream,Reader和Writer。
Java.io是专门为用户提供I/O操作的软件包。
字符流的缓冲装饰类:利用字符输入输出流逐个字符读取文件或者写入文件时,需要频繁的I/O操作并且需要进行字符编码转换而耗费了大量的资源,利用字符流的缓冲装饰类可以先把读取或者需要写入的数据存入缓冲区并整体的进行编码转化,然后一次性的读入程序或者写入文件,从而提高读写效率。字符流的缓冲装饰类包括字符缓冲数据流BufferedReader类和字符缓冲输出流BufferedWriter类。
BufferedReader:可以提供字符,数组和行的高效读取。可以指定缓冲区的大小,也可以直接采用默认缓冲区的大小。
构造方法:BufferedaReader (Reader in)
BufferedReader(Reader in, int sz) //指定了缓冲区大小的构造方法
使用方法: public int read(char[] cbuf,int off,int len) throw IOExpection //将字符读入数组的一部分
public string readline()throws IOExpection //读取一行文字
public long skip(long n) throws IOExpection //表示跳过n个字符
public void close()throws IOExpection //关闭与流有关的任何系统资源
BufferedWriter用法与此大致类似,不过有read这个词的地方都换成write.
对象序列化与反序列化:在软件开发过程中,可能需要把创建的对象保存在文件中,在需要的时候进行恢复。对象序列化(对象持久化)可以实现对象的存储和传输。对象的序列化是指把对象变为二进制数据写入到一个输出流中,对象的反序列化是指从一个输入流中读取一个对象。对象的序列化和反序列化依靠的是对象输出流ObjectOutputStream和对象输入流ObjectInputStream。这两个操作流与平台无关,利用他们可以读写基本类型的数据。从InputStream和OutputStream不能直接创建对象,所以类似于:OutputStream m=new OutputStream的语句都是错误的。
序列化的注意事项:1.以ObjectOutputStream类打开对象的输出通道2.以writeObject()方法写入对象3.以ObjectinputStream类打开输入通道。4.以readObject()方法读入对象5.对象所属的类于定义时必须加上implements Serializable关键字。
演示:
将文件file1的内容拷贝到文件file2中。
import java.io.*;
class FileCopy{
public static void main(String args[]){
try{
FileInputStream fin=new FileInputStream("file1");
FileOutputStream fout=new FileOutputStream("file2");
int c;
while((c=fin.read())!=-1){
fout.write(c);
}
fin.close();
fout.close();
}
catch(FileNortFoundExpection e){
System.out.println("file copy"+e);
}
catch(IOExpection){
System.out.println("file copy"+e);
}
}
}
过滤流:Java利用过滤流可以在读/写数据的同时对数据进行处理,典型的过滤处理如:读数据时退回已读取的字节,写数据时打印输出信息。使用过滤流时要注意的一点是:必须将过滤流和某个输出流链接。连接是通过在过滤流的狗在方法中指定入口参数来实现的。比如:FileInputStream fin=new FileInputStream("text");
PushbackInputStream fin=new FileInoutStream("text");
PushbackInputStream pin=new PushbackInputStream;
如果处理方法是现有的过滤流中没有定义过的。那么,可以从过滤流中派生子类,再在子类中定义自己的方法,称之为过滤流自定义,或者过滤流派生。自定义派生流要注意自定义过滤流中,要重写read方法和write方法来置换FilterInputStream类和FileOnputStream类中的read方法及write方法。