序列化

序列化是什么?

将对象的状态存储到特定存储介质的过程。

将Java对象转换为字节序列。

如何实现对象序列化?

实现接口serializable

实战练习:

public class BookManager {

    //序列化:写入.   把对象写入二进制文件中,前提必须实现序列化接口
public static void serial(Book book){
ObjectOutputStream oos = null;
try {
oos = new ObjectOutputStream(new FileOutputStream("D:/IoFile/serial/book.txt"));
//实现序列化
oos.writeObject(book);
System.out.println("序列化成功");
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
if(oos!=null){
oos.flush();
oos.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
} //反序列化:文件--->程序 输入 把二进制文件读取成对象
public static Book unSerial(){
ObjectInputStream ois =null;
Book book = null;
try {
ois = new ObjectInputStream(new FileInputStream("D:/IoFile/serial/book.txt"));
book = (Book) ois.readObject();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally{
try {
if(ois!=null){
ois.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return book;
}
public static void main(String[] args) {
// Book book=new Book(1, "哈利波特");
// serial(book);
Book book=unSerial();
System.out.println(book.getName());
}
}

其实体类Book类实现Serializable接口:

import java.io.Serializable;

/**
* 序列化
* 作用:把对象保存至二进制文件
* @author 爱是与世界平行
*
*/
public class Book implements Serializable{
private int id;
private String name;
public Book(int id, String name) {
super();
this.id = id;
this.name = name;
}
}

Serializable

  • 要想实现序列化(文件写入)或者反序列化(文件读取),必须实现Serializable接口。

  • 重写 readObject(ObjectInputStream in) 和 writeObject(ObjectOutputSteam

    out) 方法,则调用这两个方法进行序列化或反序列化。

  • 带 readObject() 和 writeObject() 方法的序列化和反序列化

    这两个方法可以在序列化和反序列化时定制用户的行为,即使它们被生命为private,但这丝毫不影响它们的作用。

  • 实际上,ObjectInputStream和ObjectOutputStream通过反射来寻找对象是否实现了这两个方法


反序列化

将文件中的内容读取出来。


总结

使用Reader读取文件内容1:

使用Reader读取文件内容2:

Java——序列化与反序列化的更多相关文章

  1. Java序列化与反序列化

    Java序列化与反序列化是什么?为什么需要序列化与反序列化?如何实现Java序列化与反序列化?本文围绕这些问题进行了探讨. 1.Java序列化与反序列化 Java序列化是指把Java对象转换为字节序列 ...

  2. [转] Java序列化与反序列化

    原文地址:http://blog.csdn.net/wangloveall/article/details/7992448 Java序列化与反序列化是什么?为什么需要序列化与反序列化?如何实现Java ...

  3. Java序列化与反序列化(Serializable)

    Java序列化与反序列化(Serializable) 特别注意: 1.要序列化的类必须实现Serializable借口 2.在反序列化(读取对象)的时候必须额外捕获EOFException 3.序列化 ...

  4. Java基础(五)-Java序列化与反序列化

    .output_wrapper pre code { font-family: Consolas, Inconsolata, Courier, monospace; display: block !i ...

  5. JAVA序列化和反序列化XML

    package com.lss.utils; import java.beans.XMLDecoder; import java.beans.XMLEncoder; import java.io.Bu ...

  6. Java序列化与反序列化(实践)

    Java序列化与反序列化(实践) 基本概念:序列化是将对象状态转换为可保持或传输的格式的过程.与序列化相对的是反序列化,它将流转换为对象.这两个过程结合起来,可以轻松地存储和传输数据. 昨天在一本书上 ...

  7. java序列化与反序列化(转)

    Java序列化与反序列化是什么?为什么需要序列化与反序列化?如何实现Java序列化与反序列化?本文围绕这些问题进行了探讨. 1.Java序列化与反序列化 Java序列化是指把Java对象转换为字节序列 ...

  8. Java序列化与反序列化是什么?为什么需要序列化与反序列化?如何实现Java序列化与反序列化?

    Java序列化与反序列化是什么?为什么需要序列化与反序列化?如何实现Java序列化与反序列化?本文围绕这些问题进行了探讨.  1.Java序列化与反序列化  Java序列化是指把Java对象转换为字节 ...

  9. (记录)Jedis存放对象和读取对象--Java序列化与反序列化

    一.理论分析 在学习Redis中的Jedis这一部分的时候,要使用到Protostuff(Protobuf的Java客户端)这一序列化工具.一开始看到序列化这些字眼的时候,感觉到一头雾水.于是,参考了 ...

  10. Java序列化与反序列化三连问:是什么?为什么要?如何做?

    Java序列化与反序列化是什么? Java序列化是指把Java对象转换为字节序列的过程,而Java反序列化是指把字节序列恢复为Java对象的过程: 序列化:对象序列化的最主要的用处就是在传递和保存对象 ...

随机推荐

  1. Java学习日报7.24

    package tem; public class Tem { public static void main(String[] args) { // TODO 自动生成的方法存根 //每隔10摄氏度 ...

  2. Spark学习进度-Spark环境搭建&Spark shell

    Spark环境搭建 下载包 所需Spark包:我选择的是2.2.0的对应Hadoop2.7版本的,下载地址:https://archive.apache.org/dist/spark/spark-2. ...

  3. ES快速开发,ElasticsearchRestTemplate基本使用以及ELK快速部署

    最近博主有一些elasticsearch的工作,所以更新的慢了些,现在就教大家快速入门,并对一些基本的查询.更新需求做一下示例,废话不多说开始: 1. ES快速上手 es下载:[https://ela ...

  4. python第一节:变量及数据类型

    一.变量 1.什么是变量 变:即为变化的事物 量:即为事物当前的状态 2.为什么用变量 变量可以方便的记录事物当前状态,在后面随时可以调出使用 3.怎么用变量 变量使用前需要先进行赋值(记录状态) 赋 ...

  5. MMDetection 快速开始,训练自定义数据集

    本文将快速引导使用 MMDetection ,记录了实践中需注意的一些问题. 环境准备 基础环境 Nvidia 显卡的主机 Ubuntu 18.04 系统安装,可见 制作 USB 启动盘,及系统安装 ...

  6. 设计模式之单例模式(Singleton Pattern)深入浅出

    单例模式介绍:单例模式是指确保一个类在任何情况下都绝对只有一个实例,并且提供一个全局的访问点.隐藏其所有构造方法,属于创新型模式. 常见的单例有:ServletContext.ServletConfi ...

  7. Java类的加载过程-重点!!

    java类的加载过程有以下几步共同完成: 加载->连接->初始化.连接又分为验证.准备.解析 一个非数组类的加载阶段(加载阶段获取类的二进制字节流的动作)是可控性最强的阶段,这一步我们可以 ...

  8. 一文搞懂MySQL前缀索引

    引入 通常在开发中我们需要定义字符串类型的字段,例如用户名或者用户邮箱等. 假设我们在维护一个用户登录系统,用户表的定义: create table User( ID bigint unsigned ...

  9. Can't locate Time/HiRes.pm in @INC (@INC contains

    Can't locate Time/HiRes.pm in @INC (@INC contains: /usr/local/lib/perl5 /usr/local/share/perl5 /usr/ ...

  10. 【Oracle】row_number() over(partition by )函数用法

    row_number() OVER (PARTITION BY COL1 ORDER BY COL2) 表示根据COL1分组,在分组内部根据 COL2排序,而此函数计算的值就表示每组内部排序后的顺序编 ...