第十九章 IO流2

第十九章 IO流2

  • 14.Buffered字节处理流(BufferedIn/OutputStream)
  • 15.字节处理流拷贝文件
  • 16.对象处理流
  • 17.ObjectOuputStream
  • 18.ObjectInputStream
  • 19.对象处理流使用细节
  • 20.标准输入输出流
  • 21.乱码引出转换流
  • 22.InputStreamReader
  • 23.OutputStreamWriter
  • 23.PrintStream(打印流/字节输出流)
  • 24.PrintWriter(打印流/字符输出流)
  • 25.配置文件引出Properties
  • 26.Properties读文件
  • 27.Properties创建修改文件
  • 28.本章家庭作业01
  • 29.本章家庭作业02
  • 30.本章家庭作业03

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

第十九章 IO流2_第1张图片
第十九章 IO流2_第2张图片
第十九章 IO流2_第3张图片

第十九章 IO流2_第4张图片

15.字节处理流拷贝文件

第十九章 IO流2_第5张图片
第十九章 IO流2_第6张图片
第十九章 IO流2_第7张图片
第十九章 IO流2_第8张图片
拷贝成功
第十九章 IO流2_第9张图片
下面我们试一下视频文件
第十九章 IO流2_第10张图片
第十九章 IO流2_第11张图片
拷贝成功,视频可以播放
第十九章 IO流2_第12张图片
在这里插入图片描述
可以的,文本文件的底层最终还是按照字节来处理的
第十九章 IO流2_第13张图片
拷贝成功
第十九章 IO流2_第14张图片

16.对象处理流

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

17.ObjectOuputStream

第十九章 IO流2_第22张图片
这里dat改成my,txt等等都可以
存储字符串的时候,不是writeString(),而是writeUTF()

第十九章 IO流2_第23张图片
第十九章 IO流2_第24张图片
这时运行会出现一个异常,因为Dog类没有实现Serializable
在这里插入图片描述
第十九章 IO流2_第25张图片
在这里插入图片描述
有些数据已经变成乱码了,因为不是存文本的
第十九章 IO流2_第26张图片

18.ObjectInputStream

第十九章 IO流2_第27张图片
第十九章 IO流2_第28张图片
In和out的顺序必须一致,不然会抛出异常
第十九章 IO流2_第29张图片
第十九章 IO流2_第30张图片
第十九章 IO流2_第31张图片
下面重写一下dog的toString方法
第十九章 IO流2_第32张图片
第十九章 IO流2_第33张图片
但此时又抛出了异常,因为没有重新执行ObjectOutputStream方法
第十九章 IO流2_第34张图片
下面还有一个细节,比如Dog类中有get,set方法。我们想要在ObjectInputStream中调用这个方法,需要进行向下转型(因为此时dog是Object),但ObjectInputStream中并没有Dog类,无法向下转型。

第十九章 IO流2_第35张图片

所以要将Dog类赋值到ObjectInputStream中
第十九章 IO流2_第36张图片
第十九章 IO流2_第37张图片
第十九章 IO流2_第38张图片
这里还是错误的,因为复制过去的Dog类跟原来的Dog类本质上不是同一个类

第十九章 IO流2_第39张图片
为了让ObjectInputStream与ObjectOutputStream都可以用到Dog类,这里将Dog类做成public类型,这样InputStream_ 与OutputStream_两个包都可以用Dog这个类
之后再分别重新运行ObjectOutputStream与ObjectInputStream

第十九章 IO流2_第40张图片

19.对象处理流使用细节

第十九章 IO流2_第41张图片
(3)
加上这一句话,我们在类中添加新的属性时,比如hobby时,系统不会认为因为你添加了一个属性,这个类就变成了一个全新的类,他认为只是原先类的修改版
第十九章 IO流2_第42张图片

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

第十九章 IO流2_第48张图片
第十九章 IO流2_第49张图片
将Master序列化即可
第十九章 IO流2_第50张图片
在这里插入图片描述

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

第十九章 IO流2_第51张图片

20.标准输入输出流

第十九章 IO流2_第52张图片
第十九章 IO流2_第53张图片
第十九章 IO流2_第54张图片

21.乱码引出转换流

第十九章 IO流2_第55张图片
第十九章 IO流2_第56张图片
第十九章 IO流2_第57张图片
默认情况下读取文件是按照utf-8编码,如果我们将a.txt文件的编码换成ANSI(国标码)
第十九章 IO流2_第58张图片

第十九章 IO流2_第59张图片
出现乱码问题的原因是我们没有指定读取文件的编码方式,如果我们可以指定文件的编码方式,问题就能得到解决
转换流就是将字节流转换成字符流,我们在字节流上面可以指定编码
第十九章 IO流2_第60张图片

22.InputStreamReader

第十九章 IO流2_第61张图片
第十九章 IO流2_第62张图片

第十九章 IO流2_第63张图片
第十九章 IO流2_第64张图片

第十九章 IO流2_第65张图片
第十九章 IO流2_第66张图片
上面的ANSI相当于gbk

不再是乱码
第十九章 IO流2_第67张图片
上面的写法有点麻烦,很多程序员会将第二步和第三步合在一起
第十九章 IO流2_第68张图片

23.OutputStreamWriter

第十九章 IO流2_第69张图片
第十九章 IO流2_第70张图片
在这里插入图片描述
保存成功
在这里插入图片描述
第十九章 IO流2_第71张图片
现在的编码是gbk(ANSI),下面我们将其改成utf-8
第十九章 IO流2_第72张图片
第十九章 IO流2_第73张图片

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

第十九章 IO流2_第74张图片

第十九章 IO流2_第75张图片
第十九章 IO流2_第76张图片
第十九章 IO流2_第77张图片
第十九章 IO流2_第78张图片
第十九章 IO流2_第79张图片
第十九章 IO流2_第80张图片
在这里插入图片描述

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

第十九章 IO流2_第81张图片
第十九章 IO流2_第82张图片
在这里插入图片描述
第十九章 IO流2_第83张图片
上面是打印到显示器,如果我们想要打印到文件
第十九章 IO流2_第84张图片
显示屏上面就没有输出了
第十九章 IO流2_第85张图片
在这里插入图片描述
最后一定要关闭,不然不会更新
第十九章 IO流2_第86张图片

25.配置文件引出Properties

第十九章 IO流2_第87张图片
第十九章 IO流2_第88张图片
第十九章 IO流2_第89张图片
第十九章 IO流2_第90张图片
第十九章 IO流2_第91张图片
在这里插入图片描述
第十九章 IO流2_第92张图片
但是上面的写法十分麻烦,我们可以用Properties方便的实现

26.Properties读文件

在这里插入图片描述
第十九章 IO流2_第93张图片
第十九章 IO流2_第94张图片

第十九章 IO流2_第95张图片
第十九章 IO流2_第96张图片
第十九章 IO流2_第97张图片
第十九章 IO流2_第98张图片

27.Properties创建修改文件

创建
第十九章 IO流2_第99张图片
第十九章 IO流2_第100张图片
在这里插入图片描述
hello world 表示的是注释,null就是没有注释
第十九章 IO流2_第101张图片
在这里插入图片描述

修改
第十九章 IO流2_第102张图片
第十九章 IO流2_第103张图片

28.本章家庭作业01

第十九章 IO流2_第104张图片
第十九章 IO流2_第105张图片
第十九章 IO流2_第106张图片
第十九章 IO流2_第107张图片
创建成功
第十九章 IO流2_第108张图片
下面在其中添加hello,world~
第十九章 IO流2_第109张图片
添加成功
第十九章 IO流2_第110张图片

29.本章家庭作业02

第十九章 IO流2_第111张图片
第十九章 IO流2_第112张图片

第十九章 IO流2_第113张图片
第十九章 IO流2_第114张图片
第十九章 IO流2_第115张图片

30.本章家庭作业03

第十九章 IO流2_第116张图片
第十九章 IO流2_第117张图片
第十九章 IO流2_第118张图片
这里get到的是一个Object类型,我们要将其转换成一个字符串类型
第十九章 IO流2_第119张图片
第十九章 IO流2_第120张图片
第十九章 IO流2_第121张图片
第十九章 IO流2_第122张图片
第十九章 IO流2_第123张图片
第十九章 IO流2_第124张图片
第十九章 IO流2_第125张图片
下面我们再进行一下反序列化操作
第十九章 IO流2_第126张图片
第十九章 IO流2_第127张图片

你可能感兴趣的:(JAVA第二阶段2,java,开发语言)