节点流和处理流 详解

本文详细介绍了Java中的各种流处理,包括字符流(如BufferedReader和BufferedWriter)、字节流(如BufferedInputStream和BufferedOutputStream),以及对象流(ObjectInputStream和ObjectOutputStream)的使用,重点讲解了序列化和反序列化的概念及其实现。同时涉及标准输入输出流、转换流和打印流的典型示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

1. 处理流 BufferedReader 和 BufferedWriter

2. 处理流 BufferedlnputStream 和 BufferedOutputStream

3. 对象流 ObjectInputStream 和 ObjectOutputStream

(1)序列化和反序列化

4. 标准输入输出流 System.in 和 System.out

5. 转换流 InputStreamReader 和 OutputStreamWriter

6. 打印流 PrintStream 和 PrintWriter


1. 处理流 BufferedReader 和 BufferedWriter

(1)BufferedReader和BufferedWriter属于字符流,是按照字符类读取数据的。关闭处理流时,只需要关闭外层流即可。

(2)BufferedReader读取文件,代码演示:

(3)BufferedWriter写入文件,代码演示:

2. 处理流 BufferedlnputStream 和 BufferedOutputStream

(1)BufferedInputStream是字节流,在创建BufferedInputStream时,会创建一个内部缓冲区数组。

(2)BufferedOutputStream是字节流,实现缓冲的输出流,可以将多个字节写入底层输出流中,而不必对每次字节写入调用底层系统。

3. 对象流 ObjectInputStream 和 ObjectOutputStream

(1)序列化和反序列化

①序列化:在保存数据时,保存数据的值和数据类型。

②反序列化:在恢复数据时,恢复数据的值和数据类型。

③需要让某个对象支持序列化机制,则必须让这个类是可序列化的,为了让某个类是可序列化的,该类必须实现以下两个接口之一:

Serializable(标记接口,没有方法,推荐使用)

Externalizable(该接口有方法需要实现)

(2)ObjectInputStream和ObjectOutputStream是对象处理流,提供了对基本类型或对象类型的序列化和反序列化的方法。

(3)ObjectOutputStream提供 序列化功能。

(4)ObjectInputStream提供 反序列化功能。

(5)注意事项和细节

①读写(序列化和反序列化)顺序要一致。

②要求实现序列化或反序列化对象,需要实现Serializable。

③序列化的类中建议添加SerialVersionUID(序列化的版本号),为了提高版本的兼容性。

④序列化对象时,默认将里面所有属性都进行序列化,但static或transient修饰的成员不会序列化。

⑤序列化对象时,要求里面属性的类型也需要实现序列化接口。

⑥序列化具备可继承性,也就是 如果某类已经实现了序列化,则它的所有子类也已经默认实现了序列化。

(6)实例:使用ObjectOutputStream序列化 基本数据类型和对象,并保存到文件中。

(7)实例:使用ObjectInputStream读取文件,并反序列化恢复数据。

4. 标准输入输出流 System.in 和 System.out

基本介绍

编译类型

运行类型

默认设备

System.in 标准输入流

InputStream

BufferedInputStream

键盘

System.out 标准输出流

PrintStream

PrintStream

显示器

5. 转换流 InputStreamReader 和 OutputStreamWriter

(1)基本介绍

①InputStreamReader:Reader的子类,可以将InputStream(字节流)包装成Reader(字符流)。

②OutputStreamWriter:Writer的子类,可以将OutputStream(字节流)包装/转换成Writer(字符流)。

③当处理纯文本数据时,使用字符流效率更高,并且可以有效解决中文问题,所以建议将字节流转换成字符流。

④可以在使用时指定编码格式(比如UTF-8,GBK,GB2312,ISO8859-1等)。

(2)实例:将字节流FileInputStream 转换为字符流 InputStreamReader,对文件进行读取。

(3)实例:将字节流FileOutputStream 转为字符流 OutputStreamWriter,对文件进行写入。

6. 打印流 PrintStream 和 PrintWriter

(1)打印流只有输出流,没有输入流。

(2)PrintStream是字节打印流,在默认情况下,输出数据的位置是标准输出,即输出到显示器。可以通过setOut()方法,修改打印流输出的位置/设备。

(3)PrintWriter是字符打印流。在使用指定位置输出时,必须要调用close()方法关闭流,closer()方法中才是真正的写入。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值