------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
今天刚学完IO流,下面整理一下我的学习笔记。
①根据处理数据的数据类型的不同可以分为:字节流(抽象基类为InPutStream和OutPutStream)和字符流(抽象基类为Reader和Writer)。
注意:由这四个类派生出来的子类名称都是以其父类名作为子类明的后缀。
②根据流向不同,可以分为:输入流和输出流。
字节流和字符流的区别:
字符流,它的原理就是基于字节流读取字节时去查了指定的码表。它和字节流的区别有两点:1.在读取数据的时候,字节流读到一个字节就返回一个字节,字符流使用了字节流读到一个或多个字节时,先去查指定的编码表,再将查到的字符返回;2.字节流可以处理所有类型的数据,如jpg、avi、mp3、wav等等,而字符流只能处理字符数据。所以可以根据处理的文件不同考虑使用字节流还是字符流,如果是纯文本数据可以优先考虑字符流,否则使用字节流。
一、字符流
字符流主要用来处理字符的,主要是对纯文本数据进行操作。其中子类有
InputStreamReader/OutputStreamWriter:是字节流到字符流转换的桥梁;
FileReader/FileWriter:对文件按字符流来进行操作;
BufferedReader和BufferedWriter:这两个类对应的流使用了缓冲,能大大提高输入输出的效率。这两个也是过滤器流,常用来对InputStreamReader和OutputStreamWriter进行处理; 缓冲区流要用flush方法刷新,
代码示例:使用缓冲区拷贝文本文件
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
//readLine()只返回换行符之前的值,不返回换行符
public class MyBuffer{
public static void main(String[] args) {
BufferedReader bufr=null;
BufferedWriter bufw=null;
try {
//定义输入输出字符流
bufr=new BufferedReader(new FileReader("1.txt"));
bufw=new BufferedWriter(new FileWriter("2.txt"));
String line=null;
while((line=bufr.readLine())!=null){
//写入文件
bufw.write(line);
//缓冲区流要刷新
bufw.flush();
}
} catch (IOException e) {
e.printStackTrace();
}finally{
//关闭输入输出流
if(bufr!=null){
try {
//关闭缓冲区流,其实就是关闭其中的流对象,所以流对象就不用再关闭了
bufr.close();
} catch (IOException e) {
e.printStackTrace();