IO流
写在前面
Java的IO流是什么?
IO:即in和out,输入和输出,指的是应用程序和外部设备之间的数据传递;
Java是通过流来处理IO的,流(Stream)是一个抽象的概念,是指一连串的树(字符或字节),是以先进先出的方式发送信息的通道;
特性:
先进先出:最先写入输出流的数据最先被输入流读取到;
顺序存取:可以一个接一个的往流中写入一串字节,读出时也会按写入顺序读取一串字节,不能随机访问中间的数据。
只读或者只写:每个流只能是输入流或输出流的一种,不能同时具备两个功能。
IO流的分类
按数据流的方向:输入流和输出流
按处理数据单位:字节流和字符流
按功能:节点流、处理流
还是之前学的时候存的思维导图。。。(可能不太全。。)
还是因为写的东西比较少很多东西学了又忘。。。
因为项目用的对象流,那就来聊聊对象流,先说说序列化与反序列化
序列化和反序列化的概念
序列化:把对象转换为字节序列的过程称为对象的序列化。
反序列化:把字节序列恢复为对象的过程称为对象的反序列化。
上面是专业的解释,现在来点通俗的解释。在代码运行的时候,我们可以看到很多的对象(debug过的都造吧),
可以是一个,也可以是一类对象的集合,很多的对象数据,这些数据中,
有些信息我们想让他持久的保存起来,那么这个就叫序列化。
就是把内存里面的这些对象给变成一连串的字节(bytes)描述的过程。
对象流(是字节流的部分)
序列化: 是对象转换成一个字节序列的过程,是一个写操作
反序列化: 一个字节序列转换成对象的过程 ,是一个读操作
ObjectOutputStream
构造器:
ObjectOutputStream(OutputStream out)
创建一个指定字节输出流的对象输出流对象。
常用方法:
除了提供了一些基本数据类型的写方法外,还提供了
void writeObject(Object obj)
将内存中的对象持久化到硬盘上
ObjectIntputStream
ObjectIntputStream(OutputStream out)
创建一个指定字节输入流的对象输入流对象。
常用方法:除了提供了一些基本数据类型的读方法外,还提供了
Object readObject();
从硬盘上读取一个字节序列,转换成对象
Serializable:序列化接口
如果想将对象序列化,那么对象的类型必须实现此接口。此接口内什么都没有,只是一个序列化标识。
再简略地说说字符流吧
字符流
在输出输入操作时,以字符为单位进行操作,默认是unicode编码集。
字符流的抽象父类分别是:
Writer/Reader
Writer提供了字符输出流的常用方法
void close():关闭
void write(char[] cbuf):写一个字符数组
void write(char[] cbuf, int off, int len)写一个字符数组的一部分
write(int c):写一个字符
write(String str):写一串字符
write(String str, int off, int len) 写字符串的一部分
Reader提供了字符输入流的常用方法
int read():读一个字符,存储到int的低16位
int read(char[] cbuf):将数据读进字符数组中,返回的是读取的有效字符个数
int read(char[] cbuf, int off, int len) 将字符读入数组的一部分。
其他的就以后再补充,可以看着这个思维导图理解一下,先就酱~