java 中序列化指从对象转变为 二进制流的过程中需要进行序列化,而反序列化指二进制流转换为java 对象。那么有的时候java 存储到数据库不需要序列化,

而计算机系统本质存储的就是二进制文件,数据库的本质又是什么呢?

一、从硬件说起

核心五部分:运算器、控制器、存储器、输入设备、输出设备

根据冯诺伊曼计算机原理,计算机除了五部分外,存储用于存放指令与数据,运算器完成算数与逻辑运算,外部人员通过输入/输出设备操作计算机,且计算机内部是使用二进制表示指令与数据。

其中指定由操作码和地址吗构成,操作码指操作类型,地址码指一串指令程序。那么对于数据库中的各种数据类型,存储结构是如何型成的呢?

目前现代计算机的组成

二、软件系统

软件宏观的分为:系统软件、应用软件

看到这里,数据库管理系统和操作系统均属于系统软件。

操作系统是覆盖在硬件上的第一层软件,管理计算机硬件与软件资源。并向用户提供良好的界面。操作系统与硬件相关,直接管理硬件资源,为用户完成硬件相关的操作,从而极大的提高了对硬件资源的使用与利用率。

操作系统是一种特殊的系统软件,其他系统软件运行在操作系统上,可以获得操作系统提供的大量服务。也就是说操作系统是其他系统软件与硬件之间的接口。一般用户使用计算机除了需要操作系统支持外,还需要用到

大量的其他系统软件和应用软件。

三、数据库系统

数据库系统,DBS ,是指计算机系统中引入数据库后构成的系统,一般有数据库系统,应用系统,数据库管理员,用户构成。

数据库系统是为了解决数据独立存储的问题。

在这里大胆的猜想:数据库系统是为了统一数据存储而出现的,那么对于计算机本质存储的是二进制进行的统一。使得面向数据库的数据类型是非二进制的,是数据库系统定好的数据类型,那么只需要按数据库的规则去存储,

至于数据库类型的本质,咋数据库系统内部会做处理。不过我想最终还是二进制,应为计算机只能存储二进制。而扩展的文件系统,需要思考存储的到底是什么?目前思维有限,假设我们不需要考虑数据库系统内部是如何实现

想存储器映射的,我们只关系数据库系统支持哪些数据类型。我们把数据存储到数据库即等价于存储到计算机。

Java 开发的存储面向的是数据库,那么JAVA 如何向数据库存储数据?回归本质,序列化与反序列化有是为何?

四、编程语言

首先,什么是编程语言?目前常用的编程语言:C 语言,C++,Java , C#, Python ,PHP , JavaScript ,Go ,Object-c ,Swift, 汇编语言等

语言有很多种,但是可以达到相同的目的,可以选择任何一种语言去控制计算机。

我们用语言来控制计算机,让计算机为我们做事情没这样的语言就是编程语言。编程语言有许多种,每种都有自己擅长的方面

可以将不同的汇编语言比喻成各国语言,为了表达同一个意思,可能使用不同的语句。比如世界你好的意思:

  • 汉语:世界你好;
  • 英语:Hello World
  • 法语:Bonjour tout le monde

在编程语言种,统一可以实现

  • C语言:puts("C语言中文网");
  • PHP:echo "C语言中文网";
  • Java:System.out.println("C语言中文网");

编程语言类似于人类语言,由直观的词汇组成,必须符合它固有的格式,否则计算机不会识别

五、回归Java 序列化与反序列化

序列化: 把对象转换为字节序列化存储于磁盘或者进行网络传输的过程称为对象的序列化。

反序列化:把磁盘或网络节点上的字节序列恢复到对象的过程称为对象的反序列话。

Java 种实现序列化的接口: Serializable : Java.io.Serializable

serialVersionUID: 序列化的版本好,凡是实现序列化接口的类都有一个静态达到表示序列化版本表示的变量

参考:https://blog.csdn.net/xlgen157387/article/details/79840134

  • .什么是序列化和反序列
  • Java序列化是把Java对象转换为字节序列的过程,而Java 反序列化是指把字节恢复为Java对象的过程
  • 序列化: 对象序列化最主要的用处是在传递和保存对象的时候,保证对象的完整性和可传递性。序列化是把对象转换成有序字节流,以便在网络上传输或者保存在本地文件中。序列化后的字节流保存了 Java 对象的状态以及相关的描述信息。
  • 序列化的核心就是对象状态的保存与重建
  • 反序列化: 客户端从文件中或者网络上获取序列化后的对象字节流后,根据字节流中所保存的对象状态以及描述信息,通过反序列化重建对象。
  • 本质上讲,序列化就是把实体对象状态按照一定的格式写入到有序字节流,反序列化就是从有序字节流重建对象,恢复对象状态。
  • 为什么要序列化与反序列化
  • 我们知道,当2个进程进行远程通信时,可以互相发送各种类型的数据,包括文本,图片,音频,视频等。而这些数据都会以二进制序列的形式在网络上传送。那么当2个Java进程通信时,能否实现进程间对象的传递呢?答案是可以的,就需要Java
  • 序列化与反序列化。换句话来说,发送方需要把这个Java对象转换为字节序列,然后在网络上传送,另一方面,接收方需要从字节序列中恢复Java 对象
  • 序列化的好处:01 实现了数据的持久化,可以讲数据存储到磁盘。 02 利用序列化实现远程通信,即在网络上传递对象的字节序
  • 总结
  • 1.永久性保存对象,保存对象的字节序列到本地文件或者数据库中
  • 2 通过序列化以字节流的形式使对象在网络中进行传递与接受
  • 3 通过序列化在进程间传递
  • 序列化算法实现
  • 1.将对象实例相关的类元数据输出
  • 2.递归第输出类的超类描述直到不再有超类
  • 3.类元数据完了后,开始从最顶层的超类开始输出对象实例的实际数据值
  • 4.从上至下递归输出实例的数据

六、Java 如何实现序列化与反序列化的

1. JDK 类库中序列化与反序列化API

java.io.ObjectOutputStream,writeObject(Object obj)方法可以对参数指定的obj对象进行序列化,把得到的字节序列写到一个目标输出流中;

java.io.ObjectInputStream,readObject()方法源输入流中读取字节序列,再把它们反序列化成为一个对象,并将其返回;

2.实现序列化要求

只有实现了SerializableExternalizable接口的类的对象才能被序列化,否则抛出异常!

3.实现方法

假定一个User类,它的对象需要序列化,可以有如下三种方法:

()若User类仅仅实现了Serializable接口,则可以按照以下方式进行序列化和反序列化

ObjectOutputStream采用默认的序列化方式,对User对象的非transient的实例变量进行序列化。
ObjcetInputStream采用默认的反序列化方式,对对User对象的非transient的实例变量进行反序列化。 ()若User类仅仅实现了Serializable接口,并且还定义了readObject(ObjectInputStream in)和writeObject(ObjectOutputSteam out),则采用以下方式进行序列化与反序列化。 ObjectOutputStream调用User对象的writeObject(ObjectOutputStream out)的方法进行序列化。
ObjectInputStream会调用User对象的readObject(ObjectInputStream in)的方法进行反序列化。 ()若User类实现了Externalnalizable接口,且User类必须实现readExternal(ObjectInput in)和writeExternal(ObjectOutput out)方法,则按照以下方式进行序列化与反序列化。 ObjectOutputStream调用User对象的writeExternal(ObjectOutput out))的方法进行序列化。
ObjectInputStream会调用User对象的readExternal(ObjectInput in)的方法进行反序列化。

Java 中序列化与反序列化引发的思考?的更多相关文章

  1. Java 中序列化与反序列化

    一. 序列化和反序列化概念 Serialization(序列化)是一种将对象以一连串的字节描述的过程:反序列化deserialization是一种将这些字节重建成一个对象的过程.将程序中的对象,放入文 ...

  2. JAVA中序列化和反序列化

    一般程序在运行时,产生对象,这些对象随着程序的停止运行而消失(java回收机制)但如果我们想把某些对象(因为是对象,所以有各自不同的特性)保存下来,在程序终止运行后,这些对象仍然存在,可以在程序再次运 ...

  3. JAVA中序列化和反序列化中的静态成员问题

    关于这个标题的内容是面试笔试中比较常见的考题,大家跟随我的博客一起来学习下这个过程. ? ? JAVA中的序列化和反序列化主要用于: (1)将对象或者异常等写入文件,通过文件交互传输信息: (2)将对 ...

  4. Java中由常量类引发的思考

    我们都知道,定义一个常量类是十分简单的.首先差固件一个类,然后类中声明一些public修饰的静态常量.没错就这么简单: 写好之后,在其他地方使用的时候,直接类名.属性名就可以使用了. 而LZ现在想的是 ...

  5. java 对象序列化与反序列化

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

  6. Java对象序列化和反序列化的工具方法

    import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import ja ...

  7. Java之序列化和反序列化

    序列化的对象: package test_demo.SerializableOper; import java.io.Serializable; /* * 序列化对象需要实现序列号接口 * */ pu ...

  8. Java基础—序列化与反序列化(转载)

    转载自: Java序列化与反序列化 1.Java序列化与反序列化 Java序列化是指把Java对象转换为字节序列的过程:而Java反序列化是指把字节序列恢复为Java对象的过程. 2.为什么需要序列化 ...

  9. Java对象序列化与反序列化一 JSON

    Java对象序列化与反序列化一 JSON 1. 依赖库 jackson-all-1.6.1.jar 2. 代码 public class Student {    private String nam ...

随机推荐

  1. MySQL连接池详解

    使用场景数据库连接是一种关键的.有限的.昂贵的资源,这一点在多用户的网页应用程序中体现得尤为突出.对数据库连接的管理能显著影响到整个应用程序的伸缩性和健壮性,影响到程序的性能指标.数据库连接池正是针对 ...

  2. 劳动人民万岁(拒绝惰性)------- 浅谈迭代对象(Iterable) 迭代器(Iterator)

    一.前戏 问题:如果一次抓取所有城市天气 再显示,显示第一个城市气温时有很高的延时,并且很浪费储存空间 解决方案:以“用时访问”策略,并且能把说有城市气温封装到一个对象里,可用for一句进行迭代 二. ...

  3. Django数据迁移时(或者新建模型时)报错:Did you install mysqlclient,解决后又报错:mysqlclient 1.3.13 or newer is required;you have 0.9.3

    报错信息如下: 解决方法一: 给项目根目录下mysite应用下的__init__.py文件加入如下代码: 运行又报错: 报错信息是:  mysqlclient版本太低 点击上图框中的链接进入到pyth ...

  4. 6_16 单词(UVa10129)<欧拉回路>

    考古学家有时候遇到一些神秘的门,这些门需要解开特定的谜题才能打开.因为没有其他方法可以打开门,这谜题对我们来说非常重要.在门上有许多磁盘,每个盘子上有一个英文单字在上面.这些盘子必须被安排,使得盘子上 ...

  5. 吴裕雄 python 机器学习——数据预处理正则化Normalizer模型

    from sklearn.preprocessing import Normalizer #数据预处理正则化Normalizer模型 def test_Normalizer(): X=[[1,2,3, ...

  6. Panda的学习之路(1)——series 和 Dataframe

    一.Series panda最基本的对象 # pandas的基础s=pd.Series([1,3,6,np.nan,44,1])#建立个简单的基本对象 类似一个一位数组print("建立个简 ...

  7. Docker - 命令 - docker volume

    概述 docker volume 命令 背景 docker 容器的存储, 通常需要独立于镜像 docker volume 就是负责这块的命令 1. 写在 docker volume 之前 概述 doc ...

  8. 【PAT甲级】1107 Social Clusters (30分)(非递归并查集)

    题意: 输入一个正整数N(<=1000),表示人数,接着输入N行每行包括一个他的爱好数量:和爱好的序号.拥有相同爱好的人们可以默认他们在同一个俱乐部,输出俱乐部的数量并从大到小输出俱乐部的人数( ...

  9. Analog power pin UPF defination

    在一个analog macro端口上,有些pin是always on的,有些是shut down的,如何描述这些pin的power属性?这是一个常见问题,驴就此机会大致描述一下常见的做法.对于这个问题 ...

  10. 【Math】高数-一个有趣的旋转体体积与面积

    Go confidently in the direction of your dreams. Live the life you've imagined. 题目 设曲线 \(y = \tfrac{1 ...