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. css & background & svg

    css & background & svg https://developer.mozilla.org/en-US/docs/Web/CSS/background backgroun ...

  2. Dart All In One

    Dart All In One dart & flutter https://github.com/dart-lang https://github.com/dart-lang/sdk win ...

  3. Taro 版本

    Taro 版本 https://taro-docs.jd.com/taro/versions.html 1.x 1.3.34 https://taro-docs.jd.com/taro/docs/1. ...

  4. js 反应&行动

    反应 class Reaction { _page = 1; get page() { return this._page; } set page(newValue) { this._page = n ...

  5. Unity3d 拖拽脚本报错Can't add the script component "" because the script class cannot be found

    解决办法: ①报错原因:文件名与文件内容中的类名不相符. ②关闭360.鲁大师等防护软件,重新安装系统.

  6. 1022 Digital Library——PAT甲级真题

    1022 Digital Library A Digital Library contains millions of books, stored according to their titles, ...

  7. 关于string【】 数组 进行 toString() 之后无法将数组的内容连接起来组合成 string 字符串 的问题

    string[] to string 如果直接对一个string[] 数组进行 tostring()的操作,得到的值都是 system.string[] 如果想要将 string[] 数组内容转换为一 ...

  8. [计算机图形学]绘制填充模型:重心坐标、z-buffer

    目录 一.点乘和叉乘 0. 向量表示 1. 点乘 2.叉乘 2.1 坐标运算方式 2.2 向量运算方式 2.3 叉乘的用途 二.Bounding Box 三.重心坐标 四.z-buffer 五.总结 ...

  9. 元类、orm

    目录 一.内置函数exec 二.元类 1. 什么是元类 2. 元类的作用 3. 创建类的两种方法 4. 怎么自定义创建元类 三.ORM 1. ORM中可能会遇到的问题 2. ORM中元类需要解决的问题 ...

  10. 生产者与消费者以及ActiveMQ

    生产者与消费者以及ActiveMQ 一. 多线程实现生产者与消费者 1.1 生产者与消费者头文件 #pragma once #include <iostream> #include < ...