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中的序列化和反序列化的更多相关文章

  1. Net中JSON序列化和反序列化处理(日期时间特殊处理)

    0  缘由 笔者最近在web api端使用Json.Net进行序列化处理,而在调用端使用DataContractSerializer进行反序列化,遇到日期时间处理反序列化不成功[备注:笔者使用Net ...

  2. day5-python中的序列化与反序列化-json&pickle

    一.概述 玩过稍微大型一点的游戏的朋友都知道,很多游戏的存档功能使得我们可以方便地迅速进入上一次退出的状态(包括装备.等级.经验值等在内的一切运行时数据),那么在程序开发中也存在这样的需求:比较简单的 ...

  3. 在net中json序列化与反序列化 面向对象六大原则 (第一篇) 一步一步带你了解linq to Object 10分钟浅谈泛型协变与逆变

    在net中json序列化与反序列化   准备好饮料,我们一起来玩玩JSON,什么是Json:一种数据表示形式,JSON:JavaScript Object Notation对象表示法 Json语法规则 ...

  4. 浅谈C#中的序列化与反序列化

    今天我利用这篇文章给大家讲解一下C#中的序列化与反序列化.这两个概念我们再开发中经常用到,但是我们绝大部分只用到了其中的一部分,剩下的部分很多开发人员并不清楚,甚至可以说是不知道.因此我希望通过这篇文 ...

  5. C#中JSON序列化和反序列化

    有一段时间没有到博客园写技术博客了,不过每天逛逛博客园中大牛的博客还是有的,学无止境…… 最近在写些调用他人接口的程序,用到了大量的JSON.XML序列化和反序列化,今天就来总结下json的序列化和反 ...

  6. C#中的 序列化和反序列化

    什么是序列化和反序列化? 序列化就是把一个对象保存到一个文件或数据库字段中去,反序列化就是在适当的时候把这个文件再转化成原来的对象使用. 我想最主要的作用有: 1.在进程下次启动时读取上次保存的对象的 ...

  7. java基础知识回顾之javaIO类--java序列化和反序列化

    /** *  * 一:理解序列化反序列化及其应用 * 序列化:把堆内存的对象转化成字节流的过程. * 反序列化:把字节流序列恢复重构成对象的过程. * 对象的序列化的用途:1.把对象的字节序列持久化, ...

  8. C#中的序列化与反序列化

    眼看XX鸟的课程关于C#的知识点就要学完了,翻看网络中流传的教程还是发现了一个课程中没有讲到的知识点:序列化与反序列化 无奈还是了解一下并操作一番,以备后用吧 介绍:就是将对象信息转化为二进制信息以便 ...

  9. K:java中的序列化与反序列化

    Java序列化与反序列化是什么?为什么需要序列化与反序列化?如何实现Java序列化与反序列化?以下内容将围绕这些问题进行展开讨论. Java序列化与反序列化 简单来说Java序列化是指把Java对象转 ...

随机推荐

  1. SQL优化这么做就对了

    目录 前言 SQL优化一般步骤 1.通过慢查日志等定位那些执行效率较低的SQL语句 2.explain 分析SQL的执行计划 3.show profile 分析 4.trace 5.确定问题并采用相应 ...

  2. Github access token

    Github access token https://github.com/settings/tokens https://docs.github.com/en/free-pro-team@late ...

  3. DoH & DNS over HTTPS

    DoH & DNS over HTTPS DNS over HTTPS(DoH)服务 http://mozilla.com.cn/thread-422231-1-1.html https:// ...

  4. [转]在ROS下使用zeroconf配置多机通信

    原文地址:http://www.corvin.cn/635.html,转载主要方便随时查阅,如有版权要求,请及时联系. 0x00 为何需要配置ROS多机通信 众所周知ROS是分布式系统,因此可以将机器 ...

  5. 死磕Spring之IoC篇 - 深入了解Spring IoC(面试题)

    该系列文章是本人在学习 Spring 的过程中总结下来的,里面涉及到相关源码,可能对读者不太友好,请结合我的源码注释 Spring 源码分析 GitHub 地址 进行阅读 Spring 版本:5.1. ...

  6. 21_MySQL表外连接实战

    -- 查询每名员工的编号.姓名.部门.月薪.工资等级.工龄.上司编号.上司姓名.上司部门? SELECT e.empno,#员工编号 e.ename,#员工姓名 e.deptno,#员工部门 e.sa ...

  7. MacOS下PHP7.1升级到PHP7.4.15

    最近写SDK的时候需要用到object类型提示符,PHPStorm智能提示说需要PHP7.2以上才能支持这种类型提示. 我一查我本机的PHP是7.1.30版本,于是考虑升级一下PHP版本. 首先要尝试 ...

  8. 百度webuploader_c#实现文件分片上传思路

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  9. python模块win32com中的early-bind与lazy-bind(以Autocad为例)

    1.什么是Lazy-bind模式,Early-bind模式? win32com中,Lazy-bind 模式指的是程序事先不知道对象的任何方法和属性,当对象属性,方法被调用时,程序才向对象发出一个询问( ...

  10. Spring中的依赖查找和依赖注入

    作者:Grey 原文地址: 语雀 博客园 依赖查找 Spring IoC 依赖查找分为以下几种方式 根据 Bean 名称查找 实时查找 延迟查找 根据 Bean 类型查找 单个 Bean 对象 集合 ...