什么是序列化?

在Java中,对象序列化表示将对象表示为字节序列。字节包括对象的数据和信息。可以将序列化的对象写入文件/数据库,然后从文件/数据库中读取并反序列化。代表对象及其数据的字节可用于在内存中重新创建对象。

为什么我们需要序列化?

当您需要通过网络发送对象或存储在文件中时,通常使用序列化。网络基础结构和硬盘只能理解位和字节,而不能理解Java对象。序列化将Java对象转换为字节,然后通过网络发送或保存。

为什么我们要存储或传输对象?在我的编程经验中,有以下原因促使我使用可序列化的对象。

1. 对象的创建取决于很多上下文。创建后,其他组件需要其方法及其字段。

2. 创建对象并包含许多字段时,我们不确定该使用什么。因此,将其存储到数据库以供以后进行数据分析。

Java序列化示例

下面的示例演示如何使一个类可序列化以及对其进行序列化和反序列化。

package serialization;

import java.io.Serializable;

public class Dog implements Serializable {

private static final long serialVersionUID = -5742822984616863149L;

private String name;

private String color;

private transient int weight;

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public String getColor() {

return color;

}

public void setColor(String color) {

this.color = color;

}

public int getWeight() {

return weight;

}

public void setWeight(int weight) {

this.weight = weight;

}

public void introduce() {

System.out.println("I have a " + color + " " + name + ".");

}}

package serialization;

import java.io.FileInputStream;import java.io.FileOutputStream;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;

public class SerializeDemo {

public static void main(String[] args) {

//create an object

Dog e = new Dog();

e.setName("bulldog");

e.setColor("white");

e.setWeight(5);

//serialize

try {

FileOutputStream fileOut = new FileOutputStream("./dog.ser");

ObjectOutputStream out = new ObjectOutputStream(fileOut);

out.writeObject(e);

out.close();

fileOut.close();

System.out.printf("Serialized dog is saved in ./dog.ser");

} catch (IOException i) {

i.printStackTrace();

}

e = null;

//Deserialize

try {

FileInputStream fileIn = new FileInputStream("./dog.ser");

ObjectInputStream in = new ObjectInputStream(fileIn);

e = (Dog) in.readObject();

in.close();

fileIn.close();

} catch (IOException i) {

i.printStackTrace();

return;

} catch (ClassNotFoundException c) {

System.out.println("Dog class not found");

c.printStackTrace();

return;

}

System.out.println("nDeserialized Dog ...");

System.out.println("Name: " + e.getName());

System.out.println("Color: " + e.getColor());

System.out.println("Weight: " + e.getWeight());

e.introduce();

}}

Output:

Serialized dog is saved in ./dog.ser

Deserialized Dog...

Name: bulldog

Color: white

Weight: 0

I have a white bulldog.

最后,开发这么多年我也总结了一套学习Java的资料与面试题,如果你在技术上面想提升自己的话,可以关注我,私信发送领取资料或者在评论区留下自己的联系方式,有时间记得帮我点下转发让跟多的人看到哦。

java序列化_Java序列化详解相关推荐

  1. java 冒泡排序_Java冒泡排序详解

    Java冒泡排序 排序算法概述 所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作.排序算法,就是如何使得记录按照要求排列的方法.排序算法在很多领域得到相当地重视, ...

  2. java 内部类_Java——内部类详解

    说起内部类,大家肯定感觉熟悉又陌生,因为一定在很多框架源码中有看到别人使用过,但又感觉自己使用的比较少,今天我就带你具体来看看内部类. 内部类基础 所谓内部类就是在类的内部继续定义其他内部结构类. 在 ...

  3. java 适配器_java 适配器模式 详解(带电源插座适配 例子)

    package com.zq.designpattern.adatper; /** * Created by zhengshouzi on 2015/10/26. */ //三孔插座的标准 inter ...

  4. PHP序列化_serialize_格式详解

    PHP序列化 serialize 格式详解 1.前言 PHP (从PHP 3.05 开始)为保存对象提供了一组序列化和反序列化的函数:serialize.unserialize.不 过在PHP 手册中 ...

  5. java 8 新功能详解_Java 8和Java 14之间的新功能

    java 8 新功能详解 从版本9开始,Java每6个月就有一次新功能,因此很难跟踪这些新更改. 互联网上的大多数信息都描述了最近2个Java版本之间的变化. 但是,如果您的情况与我相似,则说明您使用 ...

  6. java 8 新功能详解_Java 8的8个新功能

    java 8 新功能详解 注意:确保还检查了我们的详细教程Java 8 Features – ULTIMATE Guide . Jdk 1.8(又名Java 8)今天发布,这意味着它的通用发布版本已经 ...

  7. java 实现按规则自增功能_java运算符详解 - osc_74vaali6的个人空间 - OSCHINA - 中文开源技术交流社区...

    java基础(2)--运算符详解 自增自减规则 自增自减就是常用的 a = a++ 或者 a = ++a;前者是后缀式,先把a赋值给a,再加一:后者是后缀式,先加一,在赋值给a;而且a++,++a并不 ...

  8. java反射机制深入详解_Java反射机制深入详解

    原标题:Java反射机制深入详解 一.概念 反射就是把Java的各种成分映射成相应的Java类. Class类的构造方法是private,由JVM创建. 反射是java语言的一个特性,它允程序在运行时 ...

  9. java递归函数例子_Java递归函数详解附案例

    递归函数在Java语言中得到了广泛的应用,它使得程序的编写过程更加的清晰明了.对Java初学者来讲,递归函数是需要学习的一个重要知识点.本文将附上案例和演示代码,具体为大家介绍递归函数的概念.要素以及 ...

  10. JAVA文件上传详解(附源码)

    文章目录 JAVA文件上传详解(附源码) 1.准备工作 2.使用类介绍 FileItem类 ServletFileUpload类 3.代码编写 JAVA文件上传详解(附源码) 在web应用中,文件上传 ...

最新文章

  1. linux tomcat 绑定域名
  2. spark task和stage划分原理
  3. SAP CRM Collection wrapper的publish_current用法
  4. 4 计数器verilog与Systemverilog编码
  5. ffmpeg 0.8.7在windows环境mingw环境的编译
  6. 惊艳!Uber 的豪华开源深度学习“全家桶”
  7. mybatis中resultMap的几种用法
  8. python面经总结之常见的问题与基本模块的常见使用方法
  9. CAS、AQS、锁以及并发工具
  10. 正态分布里的西格玛_七大数据陷阱之油腻的统计学:正态分布来了
  11. Unity 根据文件路径批量修改图片格式
  12. java: 类StreamTest是公共的, 应在名为 StreamTest.java 的文件中声明
  13. 华为浏览器工具箱 html修改,华为手机修改浏览器模式为电脑浏览模式的方法
  14. linux主流ftp server,Linux下常用的Ftp Server
  15. 支持GB28281协议的远程抓拍4G低功耗摄像头解决方案
  16. 神武3进不去 服务器响应,windows7系统玩神武2卡机的解决方法
  17. 【转】如何从计算视角研究网络传播影响力最大化问题?
  18. c++ sort 转载
  19. C++学习笔记(C转)
  20. 异常(Exceptation)

热门文章

  1. 6.组函数(avg(),sum(),max(),min(),count())、多行函数,分组数据(group by,求各部门的平均工资),分组过滤(having和where),sql优化
  2. python 深度学习模型训练 多GPU下如何调用
  3. 深度学习之windows python faster rcnn 配置及demo运行
  4. 『Python × C++』函数传参机制学习以及对比
  5. 浅谈对5G核心网演进方向的几点展望
  6. ant用途及简单实现
  7. Android添加垂直滚动scrollview
  8. Python xlrd 读取xls文件
  9. 2013年7月29日周一
  10. PHP框架 Phalcon 1.0.0 beta发布,实测性能强劲