对象流

  对象的本质是用来组织和存储数据的,对象本身也是数据。那么,能不能将对象存储到硬盘上的文件中呢?能不能将对象通过网络传输到另一个电脑呢?我们可以通过序列化和反序列化实现。

java对象的序列化和反序列化

	当两个进程远程通信时,彼此可以发送各种类型的数据。无论是何种类型的数据,都会议二进制的序列的形式在网络中传送。比如,我们可以通过http协议发送字符串信息;我们也可以在网络上直接发送java对象。发送方需要把这个java对象转换为字节序列化,才能在网络上传送;接收方则需要把字节序列恢复为java对象才能正常读取。
把java对象转换为字节序列的过程为**对象的序列化**。字节序列话恢复为java对象的过程称为**对象的反序列化**。

** 对象序列化的作用有如下两种:**

  • 持久化 把对象的字节序列化永久的保存在硬盘上,通常存放在一个文件中
  • 网络通信 在网络上传送对象的字节序列。比如:服务器之间的数据通信/对象传递。

序列化涉及到的类和接口

	ObjectOutputStream代表对象输出流,它的writeObject(Object object)方法可对参数指定的obj对象进行序列化,把得到的字节序列化写到一个目标输出流中。
ObjectInputStream 代表对象输入流,他的readObject()方法从一个源输入流中读取字节序列,再把他们反序列话一个对象,并将其返回。
只有实现了Serializable接口的类的对昂才能被序列化。Serializable接口是一个空接口,只起到标记作用

对象流_写出基本的数据类型

import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.ObjectOutputStream; /**
* @author Mxhlin
* @Email fuhua277@163.com
* @Date 2022/08/29/20:32
* @Version
* @Description 对象流_写出基本的数据类型
*/
public class ObjectOutputStreamBasicTypeDemo { public static void main(String[] args) {
ObjectOutputStreamBasicTypeDemo oosbt = new ObjectOutputStreamBasicTypeDemo();
oosbt.objectOutputStream("D:\\IOTest\\ma.txt");
} /**
* @Description: 写出基本的数据类型
* @Param: [str]
* @return: void
* @Author: Mxhlin
* @Date: 2022/8/29
*/
public void objectOutputStream(String str){
ObjectOutputStream oos = null;
try {
oos = new ObjectOutputStream(new BufferedOutputStream(new FileOutputStream(str)));
oos.writeInt(12);
oos.writeChar('a');
oos.writeBoolean(false);
oos.writeDouble(12.0);
oos.writeUTF("你好啊");// String 类型
oos.flush();
}catch (Exception e){
e.fillInStackTrace();
}finally {
try {
if (oos != null){
oos.close();
}
}catch (Exception e){
e.fillInStackTrace();
}
}
}
}

运行结果

对象流_读出基本的数据类型

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.ObjectInputStream; /**
* @author Mxhlin
* @Email fuhua277@163.com
* @Date 2022/08/29/20:47
* @Version
* @Description 对象流_读取基本的数据类型
*/
public class ObjectInputSteamBasicTypeDemo { public static void main(String[] args) {
ObjectInputSteamBasicTypeDemo oisbtd = new ObjectInputSteamBasicTypeDemo();
oisbtd.objectInputStream("D:\\IOTest\\ma.txt");
} /**
* @Description: 读取基本的数据类型
* @Param: [ste]
* @return: void
* @Author: Mxhlin
* @Date: 2022/8/29
*/
public void objectInputStream(String ste){
ObjectInputStream ois = null;
try {
ois = new ObjectInputStream(new BufferedInputStream(new FileInputStream(ste)));
System.out.println("Int: "+ois.readInt());
System.out.println("Char: "+ois.readChar());
System.out.println("Boolean: "+ois.readBoolean());
System.out.println("Double: "+ois.readDouble());
System.out.println("String: "+ois.readUTF());
}catch (Exception e){
e.fillInStackTrace();
}finally {
try {
if (ois != null){
ois.close();
}
}catch (Exception e){
e.fillInStackTrace();
}
}
}
}

对象流_将对象序列化到文件

import java.io.FileOutputStream;
import java.io.ObjectOutputStream; /**
* @author Mxhlin
* @Email fuhua277@163.com
* @Date 2022/08/29/21:22
* @Version
* @Description 对象流_将对象序列化到文件
*/
public class ObjectOutputStreamObjectDemo { public static void main(String[] args) {
ObjectOutputStreamObjectDemo oosod = new ObjectOutputStreamObjectDemo();
oosod.objectOutputStream("D:\\IOTest\\木木.txt");
} /**
* @Description: 将对象序列化到文件
* @Param: [str]
* @return: void
* @Author: Mxhlin
* @Date: 2022/8/29
*/
public void objectOutputStream(String str){
ObjectOutputStream oos = null;
try {
oos = new ObjectOutputStream(new FileOutputStream(str));
User user = new User(1,"木木","18");
oos.writeObject(user);
oos.flush();
}catch (Exception e){
e.fillInStackTrace();
}finally {
try {
if (oos != null){
oos.close();
}
}catch (Exception e){
e.fillInStackTrace();
}
}
}
}

运行结果

对象流_将对象反序列化内存

import java.io.FileInputStream;
import java.io.ObjectInputStream; /**
* @author Mxhlin
* @Email fuhua277@163.com
* @Date 2022/08/29/21:38
* @Version
* @Description 对象流_将对象反序列化内存
*/
public class ObjectInputStreamObjectTpeyDemo { public static void main(String[] args) {
ObjectInputStreamObjectTpeyDemo ooo = new ObjectInputStreamObjectTpeyDemo();
ooo.ObjectInputStream("D:\\IOTest\\木木.txt");
} /**
* @Description: 将对象反序列化内存
* @Param: [str]
* @return: void
* @Author: Mxhlin
* @Date: 2022/8/29
*/
public void ObjectInputStream(String str){
ObjectInputStream ois = null;
try {
ois = new ObjectInputStream(new FileInputStream(str));
User user = (User)ois.readObject();
System.out.println(user.getUserId());
System.out.println(user.getUserName());
System.out.println(user.getUserAge());
}catch (Exception e){
e.fillInStackTrace();
}finally {
try {
if (ois != null){
ois.close();
}
}catch (Exception e){
e.fillInStackTrace();
}
}
}
}

运行结果

IO_对象流的更多相关文章

  1. [源码]ObjectIOStream 对象流 ByteArrayIOStream 数组流 内存流 ZipOutputStream 压缩流

    1.对象流 import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File ...

  2. Java IO7:管道流、对象流

    前言 前面的文章主要讲了文件字符输入流FileWriter.文件字符输出流FileReader.文件字节输出流FileOutputStream.文件字节输入流FileInputStream,这些都是常 ...

  3. Java:IO流其他类(字节数组流、字符数组流、数据流、打印流、Properities、对象流、管道流、随机访问、序列流、字符串读写流)

    一.字节数组流: 类 ByteArrayInputStream:在构造函数的时候,需要接受数据源,而且数据源是一个字节数组. 包含一个内部缓冲区,该缓冲区包含从流中读取的字节.内部计数器跟踪 read ...

  4. Java IO5:管道流、对象流

    前言 前面的文章主要讲了文件字符输入流FileWriter.文件字符输出流FileReader.文件字节输出流FileOutputStream.文件字节输入流FileInputStream,这些都是常 ...

  5. java --对象流与对象的序列化

    对象流 ObjectInputStream ObjectOutputStream类分别是InputStream和OutputStream的子类,对象输出流使用writeObject(Object ob ...

  6. Java IO流之对象流

    对象流 1.1对象流简介 1.2对象流分类 输入流字节流处理流:ObjectInputStream,将序列化以后的字节存储到本地文件 输出流字节流处理流:ObjectOutputStream 1.3序 ...

  7. Java对象流的使用

    为了让对象持久化(把对象存储到本地),可以使用java的对象流处理对象,把对象的内容写到本地存储的文件中,也可以从本地文件中读取出来.也就是常说的序列化和反序列化 主要用到了ObjectInputSt ...

  8. JAVA基础复习与总结<八> 缓冲流_数据流_对象流_IO总结

    缓冲流.数据流以及对象流 一.缓冲流 缓冲流的概念:在读写的时候,对于单字节的读取会造成硬盘的频繁读写,增加访问次数,降低了读取文件的效率.而引入缓冲流之后,就可以将多个字节写入缓冲区,在缓冲区积累之 ...

  9. Java之IO流进阶篇:内存流,打印流,对象流

    Java中的IO流,即为输入输出流.所谓输入输出流,都是相对于程序而言,程序就是这个参照物.一张图看懂输入输出流: 输入流抽象基类:InputStream,Reader 输出流抽象基类:OutputS ...

随机推荐

  1. 给妹子讲python-S01E01好用的列表

    1.python中的容器数据类型概述2.列表类型的异构性.有序性和本地可变性三大优势2.列表的基本操作(增.删.改.分片索引)3.列表的分片赋值与本地排序 [妹子说]今天开始学python啦,不过我们 ...

  2. idea 在创建maven时没有src的解决方法

    在创建maven时    加上archetypeCatalog=internal

  3. c# 把网络图片http://....png 打包成zip文件

    思路: 1.把网络图片下载到服务器本地. 2.读取服务器图片的文件流 3.使用zip帮助类,把图片文件流写进zip文件流. 4.如果是文件服务器,把zip文件流 推送文件服务器,生成zip的下载url ...

  4. NC200211 装备合成

    NC200211 装备合成 题目 题目描述 牛牛有 \({x}\) 件材料 \({a}\) 和 \({y}\) 件材料 \({b}\) ,用 \({2}\) 件材料 \({a}\) 和 \({3}\) ...

  5. lerna源码阅读

    能够找到入口文件 能够本地调试

  6. labview从入门到出家9(进阶篇)--串口通讯

    ​ Labview在工控领域,如产线,实验室等环境用得较多,其中与仪器通讯控制的方式有串口(RS232,RS485,TTL),GPIB,网口,CAN等,其中串口在仪器还有单片机控制中用来调试居多.(很 ...

  7. SpringMVC pom

    <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://mave ...

  8. dynamic + shardingsphere(4.1.1) 实现动态分库分表

    1. 主要依赖: <dependency> <groupId>com.baomidou</groupId> <artifactId>dynamic-da ...

  9. 【每天学一点-06】在Vue中使用Vant-Picker选择器,并且给选择器添加一个类似Antd-Select-showSearch的搜索功能

    一.在Vant文档中,Picker组件的API中是没有showSearch这一选项的 1.Vant-Picker 文档 2.Antd-Select 文档 3.需要完成的需求 4.因为在H5项目中出现了 ...

  10. EPLAN中的edz文件的用法

    1    EDZ 文件的定义 EDZ 是 EPLAN Data Archive Zipped(EPLAN 数据压缩文件包)的缩写,最早是专门为西门子定制的,现在已经 成为 EPLAN 中一种标准的部件 ...