一、前言
二、顺序流(合并流)
2.1 顺序流定义 / 合并流定义
JavaIO流——合并流/顺序流(SequenceInputStream):,就是把多个输入流,合并成一个流对象,且见代码1。
2.2 代码:顺序流/合并流
代码1——合并流:
package mypackage;import java.io.FileInputStream;import java.io.SequenceInputStream;//合并流/顺序流(SequenceInputStream):// 就是把多个输入流,合并成一个流对象.public class Test {public static void main(String[] args) throws Exception {// 不同输入流有不同对应txt文件,将输入流合并后,合并后的输入流可以操作多个文件SequenceInputStream sequenceInputStream = new SequenceInputStream(new FileInputStream("stream1.txt"),new FileInputStream("stream2.txt"));byte[] buffer = new byte[1024];int len = -1;while ((len = sequenceInputStream.read(buffer)) != -1) {System.out.println(new String(buffer, 0, len));}sequenceInputStream.close();}}
![6826b2c955a3f87e0da56a9263db263e.png](https://img-blog.csdnimg.cn/img_convert/6826b2c955a3f87e0da56a9263db263e.png)
![057e9eac4801c302c25db35a273fdcb2.png](https://img-blog.csdnimg.cn/img_convert/057e9eac4801c302c25db35a273fdcb2.png)
输出1:
Java程序员就业前景好,薪资高!一起来学习Java吧!
小结1:
1、合并流对应的对象是输入流,是对输入流合并,不是对输出流合并;
2、合并的是两个输入流而不是两个源文件:因为不同输入流有不同对应txt文件,用合并流将两个输入流合并后,可以输入两个文件,所以说,合并的是两个输入流而不是两个源文件。
3、合并流可以接收合并流作为实际参数,形成多个流的合并,也称合并嵌套。
2.3 面试金手指:合并流/顺序流
合并流定义:JavaIO流——合并流,接收两个输入流作为参数,合并两个输入流或合并流,对外形成一个更大的流,方便客户端操作。
合并流需要注意的点:
1、合并流对应的对象是输入流,是对输入流合并,不是对输出流合并;
2、因为不同输入流有不同对应txt文件,用合并流将两个输入流合并后,可以输入两个文件,注意合并的是两个输入流而不是两个源文件。
3、合并流可以接收合并流作为实际参数,形成多个流的合并,也称合并嵌套。
三、对象流(序列化和反序列化)
3.1 对象流 提供一种 序列化/反序列化 的实现方式
1.1 序列化和反序列化定义:
序列化: 指把堆内存中的Java对象数据,通过某种方式把对象存储到磁盘文件中或者传递给其他网络的节点(在网络上传输). 我们把这个过程称之为序列化.
反序列化:把磁盘文件中的对象数据或者把网络节点上的对象数据,恢复成Java对象的过程.
1.2 为什么要做序列化:
1):在分布式系统中,需要共享的数据的JavaBean对象,都得做序列化,此时需要把对象再网络上传输,此时就得把对象数据转换为二进制形式.以后存储在HttpSession中的对象,都应该实现序列化接口(只有实现序列化接口的类,才能做序列化操作).
2):服务钝化:如果服务发现某些对象好久都没有活动了,此时服务器就会把这些内存中的对象,持久化在本地磁盘文件中(Java对象–>二进制文件). 如果某些对象需要活动的时候,现在内存中去寻找,找到就使用,找不到再去磁盘文件中,反序列化我们得对象数据,恢复成Java对象.
1.3 Java对象流——JavaIO流中实现序列化的方式
使用对象流来完成序列化和反序列化操作:
ObjectOutputStream: 通过writeObject方法做序列化操作的.
ObjectInputStream: 通过readObject方法做反序列化操作的.
ObjectOutputStream ObjectInputStream,提供一种序列化方式,序列化方式有很多,现在互联网大厂常用的是protobuf,最高效的系列化方式
3.2 代码:对象流
3.2.1 实体类 没有实现序列化接口
代码1:
package mypackage;import java.io.File;import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;//对象流 ObjectInputpublic class Test {public static void main(String[] args) throws Exception {File file = new File("object.txt");writeObject(file);readObject(file);}private static void writeObject(File file) throws Exception {ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream(file));objectOutputStream.writeObject(new Person("小明", 12));objectOutputStream.close();}private static void readObject(File file) throws Exception {ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream(file));Person person = (Person) objectInputStream.readObject();System.out.println(person);objectInputStream.close();}}class Perso