第十九章 IO流2

14.Buffered字节处理流(BufferedIn/OutputStream)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

15.字节处理流拷贝文件

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
拷贝成功
在这里插入图片描述
下面我们试一下视频文件
在这里插入图片描述
在这里插入图片描述
拷贝成功,视频可以播放
在这里插入图片描述
在这里插入图片描述
可以的,文本文件的底层最终还是按照字节来处理的
在这里插入图片描述
拷贝成功
在这里插入图片描述

16.对象处理流

我们实际开发中,有这样一个需求,我们在保存一个数据的值的时候,同时也希望将它的数据类型保存起来。比如下面这个,我们要保证这个100是int类型的,而不是String类型的。保证这个1.1是float类型而不是double类型的。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
Serializable中没有任何方法
在这里插入图片描述
在这里插入图片描述
ObjectOut/InputStream处理流,使用修饰器模式
在这里插入图片描述
在这里插入图片描述

17.ObjectOuputStream

在这里插入图片描述
这里dat改成my,txt等等都可以
存储字符串的时候,不是writeString(),而是writeUTF()

在这里插入图片描述
在这里插入图片描述
这时运行会出现一个异常,因为Dog类没有实现Serializable
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
有些数据已经变成乱码了,因为不是存文本的
在这里插入图片描述

18.ObjectInputStream

在这里插入图片描述
在这里插入图片描述
In和out的顺序必须一致,不然会抛出异常
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
下面重写一下dog的toString方法
在这里插入图片描述
在这里插入图片描述
但此时又抛出了异常,因为没有重新执行ObjectOutputStream方法
在这里插入图片描述
下面还有一个细节,比如Dog类中有get,set方法。我们想要在ObjectInputStream中调用这个方法,需要进行向下转型(因为此时dog是Object),但ObjectInputStream中并没有Dog类,无法向下转型。

在这里插入图片描述

所以要将Dog类赋值到ObjectInputStream中
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这里还是错误的,因为复制过去的Dog类跟原来的Dog类本质上不是同一个类

在这里插入图片描述
为了让ObjectInputStream与ObjectOutputStream都可以用到Dog类,这里将Dog类做成public类型,这样InputStream_ 与OutputStream_两个包都可以用Dog这个类
之后再分别重新运行ObjectOutputStream与ObjectInputStream

在这里插入图片描述

19.对象处理流使用细节

在这里插入图片描述
(3)
加上这一句话,我们在类中添加新的属性时,比如hobby时,系统不会认为因为你添加了一个属性,这个类就变成了一个全新的类,他认为只是原先类的修改版
在这里插入图片描述

(4)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
我们看一下ObjectInputStream方法能不能将color与nation两个输出来,就能够确认之前的想法
在这里插入图片描述
正常情况下,应该输出dog的所有信息,但是color与nation都是空的
说明它在序列化的时候,并没有保存这个属性
在这里插入图片描述
(5)
在这里插入图片描述
里面的name,age,nation和color分别为String,int类型的,这两个类型都实现了序列化,但是此时我们新增一个master,而Master类是没有实现序列化,此时运行
ObjectOutputStream会报错

在这里插入图片描述
在这里插入图片描述
将Master序列化即可
在这里插入图片描述
在这里插入图片描述

(6)
在这里插入图片描述

在这里插入图片描述

20.标准输入输出流

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

21.乱码引出转换流

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
默认情况下读取文件是按照utf-8编码,如果我们将a.txt文件的编码换成ANSI(国标码)
在这里插入图片描述

在这里插入图片描述
出现乱码问题的原因是我们没有指定读取文件的编码方式,如果我们可以指定文件的编码方式,问题就能得到解决
转换流就是将字节流转换成字符流,我们在字节流上面可以指定编码
在这里插入图片描述

22.InputStreamReader

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
上面的ANSI相当于gbk

不再是乱码
在这里插入图片描述
上面的写法有点麻烦,很多程序员会将第二步和第三步合在一起
在这里插入图片描述

23.OutputStreamWriter

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
保存成功
在这里插入图片描述
在这里插入图片描述
现在的编码是gbk(ANSI),下面我们将其改成utf-8
在这里插入图片描述
在这里插入图片描述

23.PrintStream(打印流/字节输出流)

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

24.PrintWriter(打印流/字符输出流)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
上面是打印到显示器,如果我们想要打印到文件
在这里插入图片描述
显示屏上面就没有输出了
在这里插入图片描述
在这里插入图片描述
最后一定要关闭,不然不会更新
在这里插入图片描述

25.配置文件引出Properties

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
但是上面的写法十分麻烦,我们可以用Properties方便的实现

26.Properties读文件

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

27.Properties创建修改文件

创建
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
hello world 表示的是注释,null就是没有注释
在这里插入图片描述
在这里插入图片描述

修改
在这里插入图片描述
在这里插入图片描述

28.本章家庭作业01

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
创建成功
在这里插入图片描述
下面在其中添加hello,world~
在这里插入图片描述
添加成功
在这里插入图片描述

29.本章家庭作业02

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

30.本章家庭作业03

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
这里get到的是一个Object类型,我们要将其转换成一个字符串类型
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
下面我们再进行一下反序列化操作
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值