文章目录

  • Java对象为什么要实现Serializable接口?
  • Serializable接口概述

Java对象为什么要实现Serializable接口?

最近这段时间一直在忙着编写Java业务代码,麻木地搬着Ctrl-C、Ctrl-V的砖,在不知道重复了多少次定义Java实体对象时“implements Serializable”的C/V大法后,脑海中突然冒出一个思维(A):问了自己一句“Java实体对象为什么一定要实现Serializable接口呢?”,关于这个问题,脑海中的另一个思维(B)立马给出了回复“居然问这么幼稚和基础的问题,实现Serilizable接口是为了序列化啊!”,思维(A):“哦,好吧!然而,然后呢?”

此时思维(B)陷入了沉默,突然感觉自己有点浅薄了,好像写了这么多年Java还真是没有太关注过Serializable这个接口!为什么一定要实现Serializable接口?它的底层原理是什么?为什么一定要序列化,序列化又是什么?关于这些问题,不知道各位读者朋友有没有过类似的问题,如果有那么我们就在这篇文章中一起寻找答案吧!当然,如果你对这些问题都很清楚,也欢迎表达看法!

Serializable接口概述

Serializable是java.io包中定义的、用于实现Java类的序列化操作而提供的一个语义级别的接口。Serializable序列化接口没有任何方法或者字段,只是用于标识可序列化的语义。实现了Serializable接口的类可以被ObjectOutputStream转换为字节流,同时也可以通过ObjectInputStream再将其解析为对象。例如,我们可以将序列化对象写入文件后,再次从文件中读取它并反序列化成对象,也就是说,可以使用表示对象及其数据的类型信息和字节在内存中重新创建对象。

而这一点对于面向对象的编程语言来说是非常重要的,因为无论什么编程语言,其底层涉及IO操作的部分还是由操作系统其帮其完成的,而底层IO操作都是以字节流的方式进行的,所以写操作都涉及将编程语言数据类型转换为字节流,而读操作则又涉及将字节流转化为编程语言类型的特定数据类型。而Java作为一门面向对象的编程语言,对象作为其主要数据的类型载体,为了完成对象数据的读写操作,也就需要一种方式来让JVM知道在进行IO操作时如何将对象数据转换为字节流,以及如何将字节流数据转换为特定的对象,而Serializable接口就承担了这样一个角色。

原文链接:戳这里
感谢作者分享!

Java实体对象为什么一定要实现Serializable接口呢?相关推荐

  1. net.sf.json在处理json对象转换为普通java实体对象时的问题和解决方案

    我使用的net.sf.json是json-lib-2.4-jdk15.jar,把json对象转换为普通java实体对象时候有个问题,josn对象转换为java对象之后,json串里面的那几个小数点的值 ...

  2. gson java 对象_Gson把json串转换成java实体对象

    Gson把json串转换成java实体对象的方法如下: 1.首先导入Gson的jar包,网上可以下载. java实体对象如下: public class Model { private double ...

  3. Java实体对象为null时set方法空指针异常

    对null的实体对象set时会出现空指针异常时因为实体类序列化后需要创建一个对象 解决方法:new一下就好了

  4. 在线 xml转java对象_XML转Java实体对象

    1.当拿到的xml是String 类型的 String xml = "" + "张三" + "男" + "28" + & ...

  5. 扑克牌自定义排序,使用集合TreeSet实现实体对象排序,通过实现Comparable接口,重写compareTo比较器;

    一.继承Comparable实现排序 下面以扑克牌为例: 首先创建扑克实体类继承Comparable<Poker>接口: public class Poker implements Com ...

  6. java 实例化对象的几种姿势

    2019独角兽企业重金招聘Python工程师标准>>> 代码里面有注释: import java.io.*; import java.lang.reflect.Constructor ...

  7. Java提高—对象克隆(复制)/对象属性拷贝

    对象克隆(复制)假如说你想复制一个简单变量.很简单: int apples = 5; int pears = apples; 不仅仅是int类型,其它七种原始数据类型(boolean,char,byt ...

  8. java序列化深克隆_如何在内存序列化中使用Java深克隆对象

    java序列化深克隆 在我以前的文章中,我解释了深度克隆和浅层克隆之间的区别 , 以及复制构造函数和防御性复制方法比默认的Java克隆如何更好. 使用复制构造函数和防御性复制方法进行的Java对象克隆 ...

  9. 如何在内存序列化中使用Java深克隆对象

    在我以前的文章中,我解释了深度克隆和浅层克隆之间的区别 , 以及复制构造函数和防御性复制方法比默认的Java克隆更好. 使用复制构造函数和防御性复制方法进行的Java对象克隆当然具有某些优势,但是我们 ...

最新文章

  1. Loadrunner手动关联详解
  2. iOS 开发之时间选择器
  3. 嵌套循环连接,哈希连接,排序合并连接(2015-2-4学习日记)
  4. Linux的Nginx一:概况
  5. 计算机怎么隐藏桌面图标,怎么隐藏电脑界面右下角的几个图标?(看图)
  6. Django的第一步(第一节)
  7. I/O多路转接之poll,epoll
  8. 课外阅读(XHTML和XML简介)
  9. 疫情之下的“催化剂”:在线经济崛起 房产数字化变革加速
  10. qt编写的android程序在android系统中运行,中文显示乱码的解决方法
  11. [第5天]nginx环境下404问题
  12. 在 Mac上接收、暂停或停止接收通知操作方法
  13. Swift:分别使用SwiftyJSON、ObjectMapper、HandyJSON处理JSON
  14. 在线中文姓名生成工具推荐
  15. PinPhp项目目录结构
  16. Java方法 (含计算器代码)
  17. 电商自营藏猫腻 苏宁国美京东的套路谁最深?
  18. 奇虎360历届笔试面试题汇总
  19. Nginx的stub_status模块的作用及配置文件修改
  20. Advanced Installer Architect创作工具

热门文章

  1. Web3.js 学习
  2. Java提高篇 —— String缓冲池
  3. 在Windows下编译ffmpeg完全手册
  4. DirectShow系统初级指南
  5. 数据库MySQL/mariadb知识点——日志记录(2)二进制日志
  6. python 列表的推导器和内置函数
  7. 【BZOJ4254】Aerial Tramway 树形DP
  8. 动态规划(制表法)模板及应用
  9. XML基本概念及增删改查操作
  10. 20151210小问题2