javaIO中的序列化和反序列化
javaIO中的序列化和反序列化
1、什么是序列化?它是来解决什么问题的
1、我们创建的对象,一般情况下在内存中,程序关闭,或者因为没有地址指向而导致垃圾回收
2、这样,我们的对象就会丢失
3、那么我们就需要一种技术来把对象存在文件中,这样就不会丢失
4、因此,把对象存入文件,我们叫序列化技术,把文件中的对象取出来,我们叫反序列化技术。
2、如何实现序列化(例如:)
1、需要序列化的对象加一个标记接口Serializable
/**
* 1、需要序列化的对象加一个标记接口Serializable
*/
public class Book implements Serializable {
int age;
String name;
public Book(int age,String name) {
this.age = age;
this.name = name;
}
public Book() {
}
@Override
public String toString() {
return "Book{" +
"age=" + age +
", name='" + name + '\'' +
'}';
}
}
2、直接进行IO操作即可
public class SerializeUser {
public static void main(String[] args) throws IOException, ClassNotFoundException {
//序列化
serializable();
//反序列化
deserializable();
}
/**
* 序列化技术
* @throws IOException 抛出IO异常给父亲
*/
public static void serializable() throws IOException {
Book book1 = new Book(12,"金苹果");
Book book2 = new Book(13,"银苹果");
List<Book> list = new ArrayList<>();
list.add(book1);
list.add(book2);
FileOutputStream fos = new FileOutputStream("list.txt");
ObjectOutputStream oos = new ObjectOutputStream(fos);
oos.writeObject(list);
oos.close();
}
/**
* 反序列化技术
* @throws IOException 抛出IO异常给父亲
* @throws ClassNotFoundException 抛出文件找不到异常给父亲
*/
public static void deserializable() throws IOException, ClassNotFoundException {
File file = new File("list.txt");
FileInputStream fis = new FileInputStream("list.txt");
if(!file.exists() || file.length() == 0) {
return;
}
ObjectInputStream ois = new ObjectInputStream(fis);
List<Book> list = (List<Book>) ois.readObject();
for(Book book: list) {
System.out.println(book);
}
}
}
3、如何实现部分序列化
1、属性中添加添加修饰符transient的成员属性,这个成员属性不能被序列化,其他正常序列化
2、属性中添加static也是不能被序列化
3、在实现标记接口Serializable的类中重写writeObject,和ReadObject必须是private void类型(例如)
public class Book implements Serializable {
int age;
String name;
public Book(int age,String name) {
this.age = age;
this.name = name;
}
public Book() {
}
/**
* 将需要序列化的对象写到 out.writeObject()方法中
*/
@Override
private void writeObject() throws IOException {
out.writeObject(age);
out.writeObject(name);
}
/**
* 和序列化对应,并和序列化的对象一一对应
*/
@Override
private void writeObject() throws IOException {
int age = (int)in.writeObject();
String name =(String) in.writeObject();
}
@Override
public String toString() {
return "Book{" +
"age=" + age +
", name='" + name + '\'' +
'}';
}
}
4、实现接口Externalizable,实现方法writeExternal和方法readExternal
javaIO中的序列化和反序列化的更多相关文章
- Net中JSON序列化和反序列化处理(日期时间特殊处理)
0 缘由 笔者最近在web api端使用Json.Net进行序列化处理,而在调用端使用DataContractSerializer进行反序列化,遇到日期时间处理反序列化不成功[备注:笔者使用Net ...
- day5-python中的序列化与反序列化-json&pickle
一.概述 玩过稍微大型一点的游戏的朋友都知道,很多游戏的存档功能使得我们可以方便地迅速进入上一次退出的状态(包括装备.等级.经验值等在内的一切运行时数据),那么在程序开发中也存在这样的需求:比较简单的 ...
- 在net中json序列化与反序列化 面向对象六大原则 (第一篇) 一步一步带你了解linq to Object 10分钟浅谈泛型协变与逆变
在net中json序列化与反序列化 准备好饮料,我们一起来玩玩JSON,什么是Json:一种数据表示形式,JSON:JavaScript Object Notation对象表示法 Json语法规则 ...
- 浅谈C#中的序列化与反序列化
今天我利用这篇文章给大家讲解一下C#中的序列化与反序列化.这两个概念我们再开发中经常用到,但是我们绝大部分只用到了其中的一部分,剩下的部分很多开发人员并不清楚,甚至可以说是不知道.因此我希望通过这篇文 ...
- C#中JSON序列化和反序列化
有一段时间没有到博客园写技术博客了,不过每天逛逛博客园中大牛的博客还是有的,学无止境…… 最近在写些调用他人接口的程序,用到了大量的JSON.XML序列化和反序列化,今天就来总结下json的序列化和反 ...
- C#中的 序列化和反序列化
什么是序列化和反序列化? 序列化就是把一个对象保存到一个文件或数据库字段中去,反序列化就是在适当的时候把这个文件再转化成原来的对象使用. 我想最主要的作用有: 1.在进程下次启动时读取上次保存的对象的 ...
- java基础知识回顾之javaIO类--java序列化和反序列化
/** * * 一:理解序列化反序列化及其应用 * 序列化:把堆内存的对象转化成字节流的过程. * 反序列化:把字节流序列恢复重构成对象的过程. * 对象的序列化的用途:1.把对象的字节序列持久化, ...
- C#中的序列化与反序列化
眼看XX鸟的课程关于C#的知识点就要学完了,翻看网络中流传的教程还是发现了一个课程中没有讲到的知识点:序列化与反序列化 无奈还是了解一下并操作一番,以备后用吧 介绍:就是将对象信息转化为二进制信息以便 ...
- K:java中的序列化与反序列化
Java序列化与反序列化是什么?为什么需要序列化与反序列化?如何实现Java序列化与反序列化?以下内容将围绕这些问题进行展开讨论. Java序列化与反序列化 简单来说Java序列化是指把Java对象转 ...
随机推荐
- flex 布局占位符
flex 布局占位符 空 span bug .popover-custom-class .system-guide-container .buttons-box { display: flex; fl ...
- DNS & HTTPS bug
DNS & HTTPS bug SSL protocol version bug https://typescript-4.x-tutorials.xgqfrms.xyz/ errors Th ...
- AST & js interpreter
AST & js interpreter 抽象语法树 & Javascript 解析器 https://astexplorer.net/ https://esprima.org/dem ...
- nodejs 显示进度条插件
ora 显示loading.. progress 进度条 progress var ProgressBar = require("progress"); var bar = new ...
- Puppeteer: 虚拟键盘
文档 main.js const pptr = require('puppeteer'); const gotoUrl = 'http://127.0.0.1:5500/index.html'; (a ...
- alpakka-kafka(1)-producer
alpakka项目是一个基于akka-streams流处理编程工具的scala/java开源项目,通过提供connector连接各种数据源并在akka-streams里进行数据处理.alpakka-k ...
- MySQL数据库与NAVICAT安装与配置
1.安装破解版的NAVICAT:https://www.cnblogs.com/yinfei/p/11427259.html 2.连接MYSQL 下载MYSQL并安装,配置环境变量 以管理员身份运行C ...
- Java后台防止客户端重复请求、提交表单
前言 在Web / App项目中,有一些请求或操作会对数据产生影响(比如新增.删除.修改),针对这类请求一般都需要做一些保护,以防止用户有意或无意的重复发起这样的请求导致的数据错乱. 常见处理方案 1 ...
- Android 开发学习进程0.28 腾讯TBS接入和相关问题
TBS 的接入和使用 TBS 的接入 腾讯TBS是X5内核的升级版,可以当作webview 来打开 网页,可以以用来打开docx doc pdf 等文件,这里主要使用的是文件功能. 依赖接入 api ...
- mysql日志系统简单使用
MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品.MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBM ...