IO流的分类

  便于理解: “输入”“输出”是相对于内存而言的

        input:往内存里输入数据
        output:从内存往外输出

字节输入流InputStream

(1)文件流FileInputStream(作用:将文件数据流入内存)
InputStream is=new FileInputStream(filePath);//参数为String或者File类型

常用方法:

(2)缓冲流BufferedInputStream   (作用:从文件中读取数据的时候,底层会创建一个长度是8192的byte数组,把数据先读入到这个byte数组中。每次程序要操作数据时,再从byte数组中获取数据进行操作。相比于文件流,缓冲流更加高效(减少了磁盘IO的次数))
BufferedInputStream bis=new BufferedInputStream(is);//参数是InputStream

常用方法:与文件流InputStream用法相同

(3)对象流ObjectInputStream (作用:将自定义类对象写入文,反序列化读取包含自定义类对象的文件数据)

序列化:自定义类实现Serializable接口,在类中设置静态常量serialVersionUID=1L
序列化的结果在文件中是乱码,若要读取,则需要经过反序列化读到控制台查看
反序列化:能反序列化的前提是先要序列化,不然就报错:invalid stream header
注意事项:
1.能序列化的对象必须实现Serilizable接口
2.成员变量中如果有自定义类,那么这个类也必须实现Serilizable接口
3.反序列化时,类的结构和序列化时的类结构要一致。如果不能保证,则可以添加一个静态常量serialVersionUID;
4.被transient关键字修饰的成员变量,不参与序列化。读取到控制台时为null

ObjectInputStream ois=new ObjectInputStream(is);//参数也是InputStream

字节输出流OutputStream

(1)文件流FileOutputStream(作用:将内存数据流出到磁盘)
File filePath=new File("");
OutputStream os=new FileOutputStream(filePath,true);//参数为File或者String,true或false
            //false表示不拼接,直接覆盖原数据;true表示拼接,接着原数据往下写。默认是false                

(2)缓冲流BufferedOutputStream(作用:从内存读取数据到磁盘时,底层会创建一个长度是8192的byte数组,让写出的数据先存入到byte数组中)
注:当byte数组存满,或者 显示的调用flush方法的时候,会把该数组中的数据写出到文件
OutputStream os=new FileOutputStream(filePath,true);
BufferedOutputStream bos=new BufferedOutputStream(os);//参数为OutputStream

方法与文件流一致

(3)对象流ObjectOutputStream (作用:序列化将内存中包含自定义类对象的数据输出到文件)

ObjectOutputStream oos=new ObjectOutputStream(os);
oos.writeObject(new Person("Savy",24,"重庆");
(4)打印流PrintStream(作用:将内存数据顺着文件流打印到指定位置)

PrintStream ps=new PrintStream(filePath);
ps.print("abc");
ps.println("abcd");

字符输入流 Reader

(1)文件流FileReader(作用:创建字符输入流时,底层会创建一个长度为8192的byte数组,先把文件数据存入8192的byte数组中,在调用read方法往内存中读取时,再把8192的byte数组中的数据转换存入char数组中)

(2)缓冲流BufferedReader(作用:从文件中读取数据的时候,底层会创建一个长度是8192的char数组,把数据先读入到这个char数组中。每次程序要操作数据时,再从char数组中获取数据进行操作。相比于文件流,缓冲流更加高效,因为缓冲流减少了字节到字符的转换)

(3)转换流InputStreamReader(作用:保证编码和解码一致)
InputStream is=new FileInputStream(filePath);
InputStreamReader isr=new InputStreamReader(is,"UTF-8");//参数是InputStream和要转换的编码形式

字符输出流 Writer

(1)文件流FileWriter(作用:创建字符输出流时,底层会创建一个长度是8192的byte数组。当该数组存不下数据,或者显示的调用flush方法则会把该数组中的数据写出到目标位置。调用close方法也会把数组中的数据写出到目标位置)   注意:输入完成后必须关闭流
(2)缓冲流BufferedWriter(作用:从内存中写出数据的时候,底层会创建一个长度是8192的char数组,把数据先读入到这个char数组中。当这个char数组存满或显示调用flush方法后,会把数据写入到文件相比于文件流,缓冲流更加高效,因为缓冲流减少了字节到字符的转换)

(3)转换流OutputStreamWriter(作用:保证编码和解码一致)
OutputStream os=new FileOutputStream(filePath);
OutputStreamWriter osw=new OutputStreamWriter(os,"ACSII");
//参数是OutputStream和要转换的编码形式
osw.write("你好");//注意:ASCII码无法识别中文,目标文件会乱码
  • 18
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值