IO流

写在前面

Java的IO流是什么?

IO:即in和out,输入和输出,指的是应用程序和外部设备之间的数据传递;

Java是通过流来处理IO的,流(Stream)是一个抽象的概念,是指一连串的树(字符或字节),是以先进先出的方式发送信息的通道;

特性:
先进先出:最先写入输出流的数据最先被输入流读取到;
顺序存取:可以一个接一个的往流中写入一串字节,读出时也会按写入顺序读取一串字节,不能随机访问中间的数据。
只读或者只写:每个流只能是输入流或输出流的一种,不能同时具备两个功能。

IO流的分类

按数据流的方向:输入流和输出流
按处理数据单位:字节流和字符流
按功能:节点流、处理流

还是之前学的时候存的思维导图。。。(可能不太全。。)
还是因为写的东西比较少很多东西学了又忘。。。

java怎么看io流是否关闭 java关闭io流顺序_序列化

java怎么看io流是否关闭 java关闭io流顺序_数据_02

因为项目用的对象流,那就来聊聊对象流,先说说序列化与反序列化

序列化和反序列化的概念

序列化:把对象转换为字节序列的过程称为对象的序列化。
反序列化:把字节序列恢复为对象的过程称为对象的反序列化。

上面是专业的解释,现在来点通俗的解释。在代码运行的时候,我们可以看到很多的对象(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) 将字符读入数组的一部分。

其他的就以后再补充,可以看着这个思维导图理解一下,先就酱~