java 输入输出 对象序列化implements Serializable与反序列化:ObjectOutputStream.writeObject() ;objectInputStream.readObject() ;serialVersionUID字段注意
对象序列化
如何来使用对象序列化?
前提:
- Serializable
- Extemalizable
序列化工具类:ObjectOutputStream
方法:
- writeObject()
反序列化工具类:objectInputStream
方法:
- readObject()
import java.io.*; /**
* @ClassName ObjectOutputStreamWriteObjectExample
* @projectName: object1
* @author: Zhangmingda
* @description: Person 类实现序列化接口
* date: 2021/4/18.
*/
public class ObjectOutputStreamWriteObjectExample {
//实现接口Serializable可以序列化
private static class Person implements Serializable {
String name;
int age; public Person(String name, int age) {
this.name = name;
this.age = age;
}
@Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
//序列化方法
private static void writeObject(Person person,String dstPath) {
try(ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream(dstPath))){
objectOutputStream.writeObject(person);
} catch (IOException e) {
e.printStackTrace();
}
}
//反序列化方法
private static<T> void readObject(String srcPath){
try(ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream(srcPath))){
T person = (T) objectInputStream.readObject();
System.out.println(person.getClass());
System.out.println(person);
/**
* class ObjectOutputStreamWriteObjectExample$Person
* Person{name='钱老大', age=30}
*/
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
Person person = new Person("钱老大",30);
String dstPath = "输入输出文件读写/src/test/output/object-save.txt";
writeObject(person,dstPath);
String srcPath = "输入输出文件读写/src/test/output/object-save.txt";
readObject(srcPath);
}
}
import java.io.*; /**
* @ClassName ObjectOutputStreamWriteObjectExample
* @projectName: object1
* @author: Zhangmingda
* @description: Person 类实现序列化接口
* date: 2021/4/18.
*/
public class ObjectOutputStreamWriteObjectExample {
//实现接口Serializable可以序列化
private static class Person implements Serializable {
String name;
int age;
Job job; public Person(String name, int age, Job job) {
this.name = name;
this.age = age;
this.job = job;
} public Person(String name, int age) {
this.name = name;
this.age = age;
} @Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
", job=" + job.getName() +
'}';
}
}
private static class Job implements Serializable {
private String name; public Job(String name) {
this.name = name;
}
public String getName() {
return name;
}
} //序列化方法
private static void writeObject(Person person,String dstPath) {
try(ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream(dstPath))){
objectOutputStream.writeObject(person);
} catch (IOException e) {
e.printStackTrace();
}
}
//反序列化方法
private static<T> void readObject(String srcPath){
try(ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream(srcPath))){
T person = (T) objectInputStream.readObject();
System.out.println(person.getClass());
System.out.println(person);
/**
* class ObjectOutputStreamWriteObjectExample$Person
* Person{name='钱老大', age=30, job=教师}
*/
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
Person person = new Person("钱老大",30,new Job("教师"));
String dstPath = "输入输出文件读写/src/test/output/object-save.txt";
writeObject(person,dstPath);
String srcPath = "输入输出文件读写/src/test/output/object-save.txt";
readObject(srcPath);
}
}
指定哪些字段不需要序列化
存入:Person{name='钱老大', age=30, job=教师}
读取:Person{name='钱老大', age=0, job=教师} 【不被反序列化的字段置为 对应数据类型默认值】
即:类的升级
import java.io.*; /**
* @ClassName ObjectOutputStreamWriteObjectExample
* @projectName: object1
* @author: Zhangmingda
* @description: Person 类实现序列化接口
* date: 2021/4/18.
*/
public class ObjectOutputStreamWriteObjectExample {
//实现接口Serializable可以序列化
private static class Person implements Serializable {
private static final long serialVersionUID = 769204331117184540L;
private String name;
private transient int age;
private Job job; public Person(String name, int age, Job job) {
this.name = name;
this.age = age;
this.job = job;
} public Person(String name, int age) {
this.name = name;
this.age = age;
} @Override
public String toString() {
return "Person{" +
"name='" + name + '\'' +
", age=" + age +
", job=" + job.getName() +
'}';
}
}
private static class Job implements Serializable {
private String name; public Job(String name) {
this.name = name;
}
public String getName() {
return name;
}
} //序列化方法
private static void writeObject(Person person,String dstPath) {
try(ObjectOutputStream objectOutputStream = new ObjectOutputStream(new FileOutputStream(dstPath))){
objectOutputStream.writeObject(person);
} catch (IOException e) {
e.printStackTrace();
}
}
//反序列化方法
private static<T> void readObject(String srcPath){
try(ObjectInputStream objectInputStream = new ObjectInputStream(new FileInputStream(srcPath))){
T person = (T) objectInputStream.readObject();
System.out.println(person.getClass());
System.out.println(person);
/**
* class ObjectOutputStreamWriteObjectExample$Person
* Person{name='钱老大', age=30, job=教师}
*/
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
// Person person = new Person("钱老大",30,new Job("教师"));
// String dstPath = "输入输出文件读写/src/test/output/object-save.txt";
// writeObject(person,dstPath);
String srcPath = "输入输出文件读写/src/test/output/object-save.txt";
readObject(srcPath);
}
}
java 输入输出 对象序列化implements Serializable与反序列化:ObjectOutputStream.writeObject() ;objectInputStream.readObject() ;serialVersionUID字段注意的更多相关文章
- Java Io 对象序列化和反序列化
Java 支持将任何对象进行序列化操作,序列化后的对象文件便可通过流进行网络传输. 1. 对象序列化就是将对象转换成字节序列,反之叫对象的反序列化 2. 序列化流ObjectOut ...
- 【java】对象序列化Serializable、transient
package 对象序列化; import java.io.Serializable; @SuppressWarnings("serial") class A implements ...
- Java之对象序列化和反序列化
一.对象序列化和反序列化存在的意义: 当你创建对象,只要你需要,他就一直存在,但当程序结束,对象就会消失,但是存在某种情况,如何让程序在不允许的状态,仍然保持该对象的信息.并在下次程序运行的时候使用该 ...
- Java程序设计——对象序列化
对象序列化的目标是将对象保存到磁盘中或允许在网络中直接传输对象,对象序列化机制允许把内存中的Java对象转换成平台无关的二进制流,从而允许把这种二进制流持久保存在磁盘上,通过网络将这种二进制流传输到另 ...
- 谈谈 JAVA 的对象序列化
所谓的『JAVA 对象序列化』就是指,将一个 JAVA 对象所描述的所有内容以文件 IO 的方式写入二进制文件的一个过程.关于序列化,主要涉及两个流,ObjectInputStream 和 Objec ...
- java对象序列化byte[] and byte[]反序列化对象--转
import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOExceptio ...
- js对象序列化JSON.stringify()与反序列化JSON.parse()
草稿: parse用于从一个字符串中解析出json对象,如 var str = '{"name":"huangxiaojian","age" ...
- JAVA基础之——序列化和反序列化
1 概念 序列化,将java对象转换成字节序列的过程. 反序列化,将字节序列恢复成java对象的过程. 2 为什么要序列化? 2.1 实现数据持久化,当对象创建后,它就会一直在,但是在程序终止时,这个 ...
- Java 序列化 对象序列化和反序列化
Java 序列化 对象序列化和反序列化 @author ixenos 对象序列化是什么 1.对象序列化就是把一个对象的状态转化成一个字节流. 我们可以把这样的字节流存储为一个文件,作为对这个对象的复制 ...
随机推荐
- C/C++ Qt TreeWidget 单层树形组件应用
TreeWidget 目录树组件,该组件适用于创建和管理目录树结构,在开发中我们经常会把它当作一个升级版的ListView组件使用,因为ListView每次只能显示一列数据集,而使用TableWidg ...
- html+css第三篇
css reset 原则: 但凡是浏览默认的样式,都不要使用. body,dl,dd,p,h1,h2,h3,h4,h5,h6{margin:0;font-size:12px;} ol,ul{margi ...
- Java培训机构如何选择才能避免被骗?
近年来,随着IT行业的快速崛起,各类互联网人才供不应求,而Java工程师作为目前最为火爆的岗位之一,更是以高薪+高新技术的标签受到了人们的广泛关注.许多年轻人也看到了这个行业的发展前景,决定报名培训机 ...
- P6604 [HNOI2016]序列 加强版
*I. P6604 [HNOI2016]序列 加强版 摘自学习笔记 简单树论 笛卡尔树部分例题 I. 和 P6503 比较类似.我们设 \(f_i\) 表示全局以 \(i\) 结尾的子区间的最小值之和 ...
- DirectX12 3D 游戏开发与实战第十章内容(上)
仅供个人学习使用,请勿转载.谢谢! 10.混合 本章将研究混合技术,混合技术可以让我们将当前需要光栅化的像素(也称为源像素)和之前已经光栅化到后台缓冲区的像素(也称为目标像素)进行融合.因此,该技术可 ...
- DTOJ 3999: 游戏
题目描述这个游戏是这样的,你有一个初始序列S ,你每次可以选择一段任意长度的连续区间,把他们+1 再膜k,给定目标序列,你需要尝试用尽量少的操作次数将初始序列变为目标序列.作为一名优秀的OIer,您认 ...
- 【基因组注释】GMAP安装使用问题
homology策略预测基因结构,下载了公共mRNA/CDS序列,考虑用gmap比对.本来是个很简单的脚本,但总是不那么顺利. 无论是用conda安装,还是源码安装较新版本,都存在问题. gmap_b ...
- MicrosoftPowerBI—2019-nCov 新型冠状病毒肺炎多功能动态看板
https://app.powerbi.cn/view?r=eyJrIjoiNmE0ZDU0MGItOTFjYy00MWYyLWFmZjMtMThkM2EwMzg5YjgyIiwidCI6ImQxNj ...
- Python与Perl的相似与差别
Python version 3.7版本 00.命令行交互 命令行交互 Perl Python perl -e <Perl代码> #Unix/Linux/Windows/DOS 直 ...
- Linux 中的五种 IO 模型
Linux 中的五种 IO 模型 在正式开始讲Linux IO模型前,比如:同步IO和异步IO,阻塞IO和非阻塞IO分别是什么,到底有什么区别?不同的人在不同的上下文下给出的答案是不同的.所以先限定一 ...