关于Java中IO流部分的知识总结

字节流:

输入流: InputStream (抽象类)

输入流子类:FileInputStream

高效输入流:BufferedInputStream

输出流:OutputStream(抽象类)

输出流子类:FileOutputStream

高效输出流:BufferedOutputStream

字符流:

输入流:Reader(抽象类)

输入流子类:FileReader

高效输入流:BufferedReader

输出流:

输出流子类:FileWriter

高效输出流:BufferedWriter

转换流:

输入流:InputStreamReader 【字节流通向字符流的桥梁】 可以指定在读取文件时的编码(字符集)

输出流:OutPutStreamWriter【字符流通向字节流的桥梁】 可以指定写入文件时的编码(字符集)


字节流又被称作是万能流,因为计算机上所有的文件,无论是什么类型,都是以字节的形式存储在硬盘上的,在对文件进行IO操作时,以字节流的形式进行读写,

可以避开因字符集的不同导致文件被破坏。

总结起来说,在只拷贝而不对外输出显示的话,使用字节流是最好的,但是在输出显示含有中文的文本文件时,需要用字符流,以避免因字符编码问题导致

文件内容输出时乱码。而且,因为字符流=字节流+编码(字符集),所以在读写视频音频文件时,使用字符流会导致文件破坏,无法打开!

对于高效流来说,如果是对文件进行copy之类的操作时,使用BufferedInputStream和BufferedOutputStream((高效字节流))是最快的。

但是如果涉及每次读取文本中一行数据,那么只能使用BufferedReader和BufferedWriter(高效字符流)


Java IO操作的格式:

  以转换流按指定码表读写文件为例:

public class Test02{
public static void main(String[] args) throws IOException {
/*
* 将utf-8.txt(utf-8编码格式)文件中的内容复制到 gbk.txt(gbk编码格式)文件中.
* 注意:
* utf-8码表中, 一个中文占3个字节.
* gbk码表中, 一个中文占2个字节.
*/
//1. 创建输入流对象, 封装数据源文件


FileInputStream fis = new FileInputStream("utf-8.txt");
InputStreamReader isr = new InputStreamReader(fis,"utf-8");

//2. 创建输出流对象, 封装目的地文件.


FileOutputStream fos = new FileOutputStream("gbk.txt");
OutputStreamWriter osw = new OutputStreamWriter(fos,"gbk");
//3. 定义变量, 用来记录读取到的有效字符数.


int len = 0;
char[] chs = new char[1024];


//4. 循环读取文件, 只要条件满足就一直读去, 并将读取到的有效字符数赋值给变量.


while((len = isr.read(chs)) != -1) {
//5. 将读取到的内容写入到文件中

osw.write(chs, 0, len);
}
//6. 关流,释放资源.
isr.close();
osw.close();

System.out.println("拷贝完成");
}
}






發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章