JavaSE基础 (三十一)

学习文件流

文件流按照读取或写入的单位(字节数)大小来区分

字节型文件流(1字节)

FileInputStream/FileOutputStream

字符型文件流(2-字节–1字符)

FileReader/FileWriter

字节型文件输入流

了解一下继承关系 inputStream类 字节型输入流的父类

创建对象

调用一个带File类型的构造方法

调用一个带String类型的构造方法

常用的方法

int code = read(); 每次从流管道中读取一个字节 返回字节码的code码
int count = read(byte[] )每次从流管道中读取若干字节 存入数组内 返回有效元素
skip(long n)跳过几个字节 读取
多线程————————>利用几个线程同时读取文件
*close()   将流管道关闭---必须要做 最好放在fianlly里 注意代码的健壮性 严谨性

字节型文件输出流

FileOutput 将数据写入文件中

java.io

继承OutputStream 所有字节输出型的父类

创建对象

调用一个带file参数 还有file Boolean重载

调用一个带String参数 还有String boolean 重载

常用方法

writr(int code);将给定的code对应的字符写入文件“=”
write(byte[]) 将数组中的全部字节写入文集 getByte()
flush() 将管道内的字节推入(刷新)文件
close() 注意在finaly类中关闭

字符型文件流

FileReader FileWriter

只能操作存文本文件(右键打开方式 记事本打开 能看懂).txt

FileReader

java.io包

继承 InputStreamReader Reader

构造方法

常用

read()

read(char[])

FileWriter

java.io包

继承OutputStreamWriter Writer

构造方法 带file参数 带file,boolean参数

                  带String参数 带String,boolean参数

常用方法

writer(int)
writer(char[])
writer(String)
int count = read(char[]);
close() flush()

缓冲流

在管道中内增加缓存的数据

让我们使用流读取的文字更加流畅

高级流—–》创建通过低级流

BufferedInputStream/BufferedOutputStream
BufferedReader/BufferedWriter
BUfferedInPutStream
构建方式 使用低级流构建
基本上使用与低级流完全一致
read()skip()available()close() 
BufferedOutStream
构建方式 使用低级流构建 注意缓冲流构建的时候没有boolean类型的参数
基本使用与低级流的方法完全一致
read()skip()available()close()
BufferedOutputStream

对象流

对象的序列化/反序列化

为什么要有文件

文件永久保存信息    很多数据存入文件-----数据持久化

如果按照以行为单位写信息

好处在于每一行记录的信息都是相关的

信息我们可以读出来 直接看懂文件

不好在于第一不一定安全 直接看懂

不好在于只能记录String信息 不一定能记录一些动作(方法)

读取出来的信息 String——>Person

如果能将对象拆分成字节码直接写入文件

将对象直接存入文件中—–对象流

为什么要重写toString方法

toString 方法默认是打印对象和hashcode码

当输出为一个对象名的时候

重写toString方法可以打印对象的值

对象序列化与反序列化

对象的序列化指的是

将一个完整的对象 拆分成字节碎片 记录在文件中

对象的反序列化指的是

将文件中记录的对象随便 反过来组合一个完整的对象

如果想要将对象序列化到文件中

需要对象实现Serializable接口

是一个示意性的接口

如果要实现反序列化

需要给对象提供一个序列化的版本号 1.7版本—>String 1.8—>String