restcontroller接收多个对象_IO,对象传输的基石(二)

一、前言

二、顺序流(合并流)

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
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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值