处理流:对象流

ObjectInputStreamOjbectOutputSteam用于存储和读取基本数据类型数据或对象的处理流。可以把Java中的对象写入到数据源中,也能把对象从数据源中还原回来。

序列化:用ObjectOutputStream类保存基本类型数据或对象的机制。

反序列化:用ObjectInputStream类读取基本类型数据或对象的机制

对象序列化机制

序列化:将内存中的Java对象转换成二进制流持久地保存在磁盘上,或通过网络将这种二进制流传输到另一个网络节点(ObjectOutputStream)。

反序列化:将磁盘文件中的二进制流还原成内存中的一个Java对象(ObjectInputStream)。

要想将一个自定义的Java对象是可序列化的,需要满足相应的要求:

  • 需要实现接口:Serializable
  • 给当前类提供全局常量:serialVersionUID
  • 除了当前类(Person)需要实现Serializable接口,还需要保证内部所有的属性也是可序列化的。(默认情况下,基本数据类型都是可序列化的)

注意ObjectOutputStreamObjectInputStream不能序列化statictransient修饰的成员变量。

transient修饰符: 不可序列化的。

序列化对象:

public class Person implements Serializable {
public static final long serialVersionUID = 48542L;
private String name;
private int age;
private Account account;
....// get、set方法
}
class Account implements Serializable {
private static final long serialVersionUID = 68547L;
double money;
....// get、set方法
}

序列化操作:

/** 序列化 */
@Test
public void testObjectOutputStream() {
ObjectOutputStream objectOutputStream = null;
try {
objectOutputStream = new ObjectOutputStream(new FileOutputStream(new File("object.dat")));
objectOutputStream.writeObject(new String("世界您好!"));
objectOutputStream.flush(); objectOutputStream.writeObject(new Person("Tom",20));
objectOutputStream.flush(); objectOutputStream.writeObject(new Person("Jerry",20,new Account(20000)));
objectOutputStream.flush(); } catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (objectOutputStream != null) objectOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
/** 反序列化 */
@Test
public void testObjectInputStream() {
ObjectInputStream objectInputStream = null;
try {
objectInputStream = new ObjectInputStream(new FileInputStream(new File("object.dat")));
Object object = objectInputStream.readObject();
String str = (String) object;
Person person1 = (Person) objectInputStream.readObject();
Person person2 = (Person) objectInputStream.readObject();
System.out.println(str);// 世界您好!
System.out.println(person1);// Person{name='Tom',age=20,account=null}
System.out.println(person2);// Person{name='Jerry',age=20, account=Account{money=20000.0}}
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
} finally {
try {
if (objectInputStream != null) objectInputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}

JAVA_基础IO流对象流(三)的更多相关文章

  1. JAVA笔记12__字节、字符缓冲流/打印流/对象流/

    /** * !!:以后写流的时候一定要加入缓冲!! * 对文件或其它目标频繁的读写操作,效率低,性能差. * 缓冲流:好处是能更高效地读写信息,原理是将数据先缓冲起来,然后一起写入或读取出来. * * ...

  2. JAVA_基础IO流随机存取文件流(四)

    随机存取文件流 RandomAccessFile 声明在java.io包下,但直接继承于java.lang.Object类.并 且它实现了DataInput.DataOutput这两个接口,也就意味着 ...

  3. Java 基础-IO、stream 流、文件操作

    输入输出流的分类 在 java.io 包中,包含了输入输出操作所需的类. I/O 流可以安装不同的标准分类: 按照流的方向分类: 输入流:将信息从代码外部输入代码 输出流:将代码得到的数据输出到文件. ...

  4. JavaScript -基础- 函数与对象(三)数组对象

    一.数组对象 1.创建方式 1)创建方式一 var arr=[1,2,3]; 2)创建方式二 var arr2=new Array(1,2,3); 注意: 数组中可以存储任何数据类型.方法类型(Jav ...

  5. JavaScript -基础- 函数与对象(三)正则、Match对象

    一.正则对象 1.创建方法 1)方式一 var re_obj=new RegExp("\d+","g") 规则+模式(g 全局模式/i 不区分大小写/gi) r ...

  6. JavaScript -基础- 函数与对象(三)Date对象

    一.Date对象 1.创建方法 var date_obj=new Date(); alert(date_obj.toLocaleString()) var date_obj=new Date(&quo ...

  7. io流(对象流总结)

    对象流 对象流就是对引用数据类型进行操作 序列化:将对象的状态信息转换为可以存储或传输的形式的过程,因此类需要序列化后才可以存储到文件中 对象输出流: 很简单,就三句话,将把一个对象导入指定文件中,要 ...

  8. java对象流(二)

    对象流,可以将java中的对象转为字节进行输出.将对象写入文件时.文件输出流是将字节写入到文件中. 对象流是将给定的对象转化为一组字节.writeObject()方法就是将对象转为字节. 对象流,读的 ...

  9. day03 对象流与序列化

    对象流 java.io.ObjectOutputStream和ObjectInputSteam 对象流是一对高级流,在流连接中的作用是进行对象的序列化与反序列化. 对象序列化:将一个java对象按照其 ...

随机推荐

  1. DFS,BFS 练习(深搜,广搜,图,leetcode)

    https://leetcode-cn.com/problems/route-between-nodes-lcci/ 节点间通路.给定有向图,设计一个算法,找出两个节点之间是否存在一条路径. 示例1: ...

  2. kubernetes 中的证书工作机制

    一文带你彻底厘清 Kubernetes 中的证书工作机制 搬砖者: 张首富 时 间: 2020-05-26 w x: y18163201 原文地址:https://zhaohuabing.com/po ...

  3. sql语句执行次序

    from→on→join→where→group by→having→select→distinct→order by→limit

  4. JAVA字符配置替换方案

    在JAVA中,很多时候,我们后台要对数据进行变量配置,希望可以在运行时再进行变量替换.我们今天给大空提供的是org.apache.commons.text方案. 1.首先,引用org.apache.c ...

  5. Css:常用的去除默认样式

    *{   padding: 0;   margin: 0; } ul,ol{   list-style: none; } a,a:hover,a:link,a:visited,a:active{    ...

  6. sqli-labs less8-10(布尔盲注时间盲注)

    less-8 布尔盲注 首先利用?id=1' and 1=1 --+和?id=1' and 1=2 --+确定id的类型为单引号''包裹.然后进行盲注. 盲注思路: 破解当前数据库名: and len ...

  7. Pytest 学习(二十五)- 解决pytest参数化测试标题都一样问题

    前言 使用参数化测试化后,allure的报告如下显示: 源代码如下: # -*- coding: utf-8 -*- # @Time : 2020/12/13 17:27 # @Author : lo ...

  8. 20201204-3 opp编程好处

    面向对象编程(Object-Oriented Programming )介绍 对于编程语言的初学者来讲, OOP不是一个很容易理解的编程方式,大家虽然都按老师讲的都知道0OP的三大特性是 继承.封装. ...

  9. MySQL锁:02.InnoDB锁

    目录 InnoDB锁 InnoDB行锁实现机制 InnoDB隐式.显式锁 InnoDB锁类型 共享锁 排他锁 意向锁 InnoDB锁兼容性 InnoDB行锁范围.粒度 InnoDB行锁粒度一览 意向插 ...

  10. Electron安装打包指南

    当前环境Debian Linux-Deepin 安装Node 直接下载 命令下载 下载 wget https://nodejs.org/dist/v14.15.1/node-v14.15.1-linu ...