java序列化 java.io.Serializable和java.io.Externalizable【转】

Serializable 接口和 Externalizable 接口的区别 接口和接口都用于支持对象的序列化,但它们在实现方式和使用方法上有一些区别。 阅读详情

即使你没有用过对象序列化(serialization),你可能也知道它。但你是否知道 Java 还支持另外一种形式的对象持久化,外部化(externalization)?
下面是序列化和外部化在代码级的关联方式:
public interface Serializable {}
public interface Externalizable extends Serializable {
  void readExternal(ObjectInput in);
  void writeExternal(ObjectOutput out);
}
[b]序列化和外部化的主要区别[/b]
外部化和序列化是实现同一目标的两种不同方法。下面让我们分析一下序列化和外部化之间的主要区别。
通 过Serializable接口对对象序列化的支持是内建于核心 API 的,但是java.io.Externalizable的所有实现者必须提供读取和写出的实现。Java 已经具有了对序列化的内建支持,也就是说只要制作自己的类java.io.Serializable,Java 就会试图存储和重组你的对象。如果使用外部化,你就可以选择完全由自己完成读取和写出的工作,Java 对外部化所提供的唯一支持是接口:
voidreadExternal(ObjectInput in)
void writeExternal(ObjectOutput out)
现在如何实现readExternal() 和writeExternal() 就完全看你自己了。
序 列化会自动存储必要的信息,用以反序列化被存储的实例,而外部化则只保存被存储的类的标识。当你通过java.io.Serializable接口序列化 一个对象时,有关类的信息,比如它的属性和这些属性的类型,都与实例数据一起被存储起来。在选择走Externalizable这条路时,Java 只存储有关每个被存储类型的非常少的信息。
[b]每个接口的优点和缺点[/b]
[b]Serializable[/b][b]接口[/b]
·         [b]优点:[/b]内建支持
·         [b]优点:[/b]易于实现
·         [b]缺点:[/b]占用空间过大
·         [b]缺点:[/b]由于额外的开销导致速度变比较慢
[b]Externalizable[/b][b]接口[/b]
·         [b]优点:[/b]开销较少(程序员决定存储什么)
·         [b]优点:[/b]可能的速度提升
·         [b]缺点:[/b]虚拟机不提供任何帮助,也就是说所有的工作都落到了开发人员的肩上。
在两者之间如何选择要根据应用程序的需求来定。Serializable通常是最简单的解决方案,但是它可能会导致出现不可接受的性能问题或空间问题;在出现这些问题的情况下,Externalizable可能是一条可行之路。
要记住一点,如果一个类是可外部化的(Externalizable),那么Externalizable方法将被用于序列化类的实例,即使这个类型提供了Serializable方法:
private void writeObject()
private void readObject()

http://tech.ddvip.com/2009-04/1239966580115648.html   序列化的作用

http://topinking.javaeye.com/blog/226401  相关代码

http://renyangok.javaeye.com/blog/45404  版本问题

http://hi.baidu.com/lightingman/blog/item/0e3d6dfd9971644cd7887d14.html  概要性的说明

困惑 :一般将对象序列化后方可在网络上进行传输,但是一个JAVAWEB的项目,即使是采用SSH框架(我指的不是那种远程传输,如RMI等项目),对象的传递也无非就是在服务器机上啊,没有跨网络啊,更别提在网络上传输对象,那为什么javabean 、Hibernate的PO类等都推荐被序列化?

解答:在hibernate 里,并非所有的实体类必须实现序列化接口,因为在hibernate 中我们通常是将基本类型的数值映射为数据库 中的字段。而基础类 型都实现了序列化接口(String也实现了)。 所以,只有在想将一个对象完整存进数据库 (存储为二进制码),而不是将对象的属性分别存进数据库 ,读取时再重新构建的话,就可以不用实现序列化接口。 实现了Serializable,可以方便保存数据。

1,序列化与反序列化:ObjectOutputStream、writeObject()、readObject();接口Externalizable需要实现writeExternal()和readExternal()

2,序列化的版本问题:

Java Serializable、Externalizable实现序列化、反序列化-实例-static、transient修饰的变量不会被序列化 在JAVA中,对象的序列化和反序列化被广泛的应用到RMI(远程方法调用)及网络传输中。 实现Serializable接口和实现Externalizable接口实现序列化、反序列化的区别: 1 类实现Serializable接口不用实现方法;类实现Externalizable接口需要实现writeExternal,readExternal方法,不然反序列后的对象不含有属性值,都是默认的初始值 ... 阅读详情

相关推荐

Proteus 8.17安装部署全指南:避坑、汉化与STM32库配置

Proteus是一款广泛用于单片机仿真与电路设计的EDA工具,其核心价值在于支持嵌入式系统原型验证与教学实践。Proteus 8.17版本重构了许可证机制(LIC Engine)、依赖环境(VC++ 2019/NET 4.8)及路径加载逻辑,导致传统安装方法失效。掌握正确安装部署流程,是保障原理图绘制、VSM仿真(如51/STM32/ESP32)及外设波形观测(OLED、SPI、ADC)稳定运行的前提。本文聚焦Windows平台下零失败安装路径选择、权限配置、汉化实施与高频器件(如STM32F103)元件库

weixin_33377602的博客 402

Externalizable和Serializable

1、Serializable序列化时不会调用默认的构造器,而Externalizable序列化时会调用默认构造器的!!! 2、Serializable:一个对象想要被序列化,那么它的类就要实现 此接口,这个对象的所有属性(包括private属性、包括其引用的对象)都可以被序列化和反序列化来保存、传递。 Externalizable:他是Serializable接口的子类,有时我们不希望序列化那么

百炼成钢 1万+

OPTI Toolbox v2.28 安装与 3 个求解器补全:SCIP、SeDuMi、MOSEK 配置详解

本文详细介绍了OPTI Toolbox v2.28在MATLAB环境下的完整安装指南,包括SCIP、SeDuMi和MOSEK三个关键求解器的配置与优化技巧。通过分步指导和实战案例,帮助用户高效搭建强大的优化工具包,提升混合整数规划、二次约束二次规划等复杂问题的求解效率。

weixin_29039773的博客 350

java中Serializable和Externalizable接口浅析

摘要: 本文主要要看看JDK中使用Serializable和Externalizable接口来完成Java对象序列化,并给出部分属性序列化的几种方式,最终做出Serializable和Externalizable接口的几个方面的对比。 Java序列化是指把Java对象转换为字节序列的过程;而Java反序列化是指把字节序列恢复为Java对象的过程。从而达到网络传输、本地存储的效果。 本文主要要...

you are sherlocked by me! 1846

BraTS数据集保姆级使用指南:从下载、预处理到可视化(附Python脚本)

本文提供BraTS数据集的完整使用指南,涵盖从下载、预处理到可视化的全流程,并附有Python脚本示例。详细解析了医学影像处理中的数据结构、标准化流程和可视化技巧,帮助初学者快速掌握BraTS数据集的应用方法,提升医学影像分析效率。

weixin_27310417的博客 462

从零搭建Arduino仿真开发环境:SimulIDE与IDE配置全攻略

本文详细介绍了如何从零搭建Arduino仿真开发环境,涵盖SimulIDE与Arduino IDE的配置全流程。通过仿真模拟环境,开发者可以零成本试错,快速验证电路设计和程序逻辑,特别适合初学者和便携开发需求。文章提供了软件安装、环境配置、项目实战及问题排查的完整指南,帮助读者高效掌握Arduino仿真开发技巧。

weixin_29284657的博客 518

java.io 序列化 总结(一)---Serializable 和 Externalizable 的区别与联系

我们可以通过序列化来保存一个对象的状态(实例变量)到文件中,也可以从这个格式化的文件中很容易地读取对象的状态从而可以恢复我们保存的对象。 对象序列化就是把对象写入到输出流中,用来存储或者传输。 对象的反序列化就是从输入流中读取对象。       用来实现序列化的类都在java.io包中,我们常用的类或接口有:         ObjectOutputStream:提

haku 6403

数字IC后端手把手实战教程 | Innovus verify_drc VIA1 DRC Violation解析及脚本自动化修复方案

数字IC后端实战项目案例之Innovus verify_drc DRC Violation脚本自动化修复方案

weixin_37584728的博客 4048

Java 序列化之Externalizable完全解读

  Serializable 劣势   实现Serializable接口,可以通过Java的序列化机制自动完成JavaBean的序列化和反序列化过程,亦可以通过ObjectOutputStream.writeObject()和ObjectInputStream.readObject自定义部分序列化过程,但是主要序列化过程还是需要ObjectOutputStream.defaultWiteObject()和ObjectInputStream.defaultReadObject默认操作来完成。   使用Seri

键盘上流淌的日子 9618

2026.1.9:最新VSCode集成claude插件完美解决方案,跳过登录界面,使用国内Kimi K2进行计费

本文介绍了如何安装配置Claude插件并连接Kimi K2 API的详细步骤:1)搜索安装Claude插件;2)进入设置关闭登录提示;3)在settings.json中添加API配置,包括ANTHROPIC_AUTH_TOKEN(需替换为Kimi API Key)和ANTHROPIC_BASE_URL;4)通过Kimi官网获取API Key。完成配置后即可正常使用该插件。文中配有完整的操作截图指引。

拥抱具身智能,昇腾Ascend C 8721

【Realtek sdk-3.4.14b】RTL8197FH+RTL8363NB当WAN/LAN IP冲突的时候,再次切换回正常的WAN,出现电脑无法上网也无法ping通设备网关问题分析及解决方案

如上图所示,当WAN和LAN网段冲突的时候,会导致路由设备异常,无法上网,但是修改为不冲突的网段之后,依然无法上网,同时下级PC也无法ping通路由设备,正常的如下图所示如上图所示,正常网络拓扑是可以正常的,但是在上级和路由LAN冲突的时候,再次切换为正常的网络也是异常问题复现步骤1.路由设备WAN口接到一个和本级路由是相同网段的设备2.拔掉WAN口,将WAN口接到一个和本级路由是不同网段的设备3.此时PC无法访问路由器。

wgl307293845的博客 665

Java序列化 Serializable和Externalizable浅析

Serializable接口 ObjectOutputStream#writeObject() 与 NotSerializableException ObjectInputStream#readObject() 与 ClassNotFoundException Serializable接口的类,不会调用任何构造器 非基本类型成员变量,需实现Serializable接口 泛型类型的成员变量,需实现Serializable接口 序列化保存所有对象网 transient与writeObject/readObjec

anlian523的博客 1158

【学习系列】SAP RAP 4:通过注解来完成一些常规需求

本文介绍了RAP应用中常用注解的实现方式,包括搜索帮助、文本描述绑定、联动搜索、字段控制等功能。通过@Consumption、@UI等注解可以实现搜索帮助定义、多字段联动、必输校验、默认排序和默认值设置。管理字段可通过@Semantics注解自动记录创建/修改信息,长文本使用@UI.multiLineText实现多行显示。这些注解可优化界面交互和数据管理,为后续行为定义功能开发奠定基础。文章结构清晰,针对不同需求提供了具体的实现方案和代码示例。

DeveloperMrMeng的博客 697

Externalizable的用法及与Serializable的异同

Externalizable接口 Externalizable接口扩展自java.io.Serializable接口。实现java.io.Serializable即可获得对类的对象的序列化功能。而Externalizable可以通过writeExternal()和readExternal()方法可以指定序列化哪些属性。 Externalizable用法 创建一个E...

newchitu的博客 3071

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

Java 实现序列化接口 Serializable

java对象实现Serializable接口 Serializable接口在JDK1.1开始声明 所在包为java.io中,仅声明为一个接口,并没有任何方法。 1.序列化和反序列化 (1)Java序列化是指把Java对象转换为字节序列的过程,而Java反序列化是指把字节序列恢复为Java对象的过程; (2)序列化:对象序列化的最主要的用处就是在传递和保存对象的时候,保证对象的完整性和可传...

weixin_39509830的博客 8566

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Java 对象 序列化/反序列化 Serializable和 Externalizable 基本用法

Java 对象 序列化/反序列化 Serializable和 Externalizable 基本用法概念主要功能场景Serializable序列化类实现 Serializable对象 序列化/反序列化Externalizable序列化类实现 Externalizable对象 序列化/反序列化 概念 所谓序列化是把 Java对象转换成字节流保存到本地文件 反序列化是指从磁盘读取相关字节流转换成 J...

Shawn Jeon`s blog 908

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Serializable序列化和Externalizable序列化与反序列化的使用

### 1、序列化是干啥用的? 序列化的原本意图是希望对一个Java对象作一下“变换”,变成字节序列,这样一来方便持久化存储到磁盘,避免程序运行结束后对象就从内存里消失,另外变换成字节序列也更便于网络运输和传播,所以概念上很好理解: - 序列化:把Java对象转换为字节序列。 - 反序列化:把字节序列恢复为原先的Java对象。而且序列化机制从某种意义上来说也弥补了平台化的一些差异,毕竟转换后的字节流可以在其他平台上进行反序列化来恢复对象。 ### 2、对象序列化的方式? 在Java中,如果一个对象要

qq_43842093的博客 1315

Java序列化——Serializable和Externalizable

Java序列化——Serializable和Externalizable 1. 继承Serializable接口 import java.io.Serializable; /** * @author gyh * @csdn https://blog.csdn.net/qq_40788718 * @date 2020/8/12 22:51 */ public class User implements Serializable { private static final long s

qq_40788718的博客 255

Serializable接口与Externalizable接口区别

被Serializable接口声明的类的对象的内容都将被序列化,如果现在用户希望自己指定序列化的内容,则可以让一个类实现Externalizable接口,此接口定义如下: public interface Externalizable extends Serializable { public void writeExternal(ObjectOutput out) throws I...

1943

Java JDK序列化 (Serializable和Externalizable)

概念: 序列化:将结构对象转为字节序列的过程。 反序列化:将字节序列恢复为结构u对象的过程。 为什么要序列化: 简单的说序列化是用来通信的,为了跨进程传递格式化数据(byte流)。 当两个进程在进行远程通信时,彼此可以发送各种类型的数据。无论是何种类型的数据,都会以二进制序列的形式在网络上传送。发送方需要把这个对象转换为字节序列,才能在网络上传送;接收方则需要把字节序列再恢复为对象。 这样客户...

眉头的骰 1328

Java序列化——Serializable、Externalizable源码阅读与总结

一、Java序列化概述 1、什么是序列化 序列化(Serialization):是将对象的状态信息转换为可以存储或传输的形式的过程。更通俗地讲,是将该对象字段和状态信息以字节流的方式输出到目的地。 2、序列化的应用场景 一是实现pojo对象的读写操作,将每个对象转换为字节流,而这些字节流可以被持久化到设备上,再次读取时会将字节流还原成对象。当我们希望某些数据能在程序停止运行后,还...

zhoucheng05_13的博客 685

Externalizable与Serializable

1.相互关系 首先两者都是接口,Externalizable继承Serializable,并增加了两个方法声明,分别是writeExternal和readExternal。我画出了UML图来表现他们的关系,如下: 2.Serializable介绍 (1)Serializable接口没有定义方法,也没有任何常量定义,就一空接口。如果有类实现了Seri...

ying3072的博客 706

Serializable和Externalizable浅析

Java序列化是指把Java对象转换为字节序列的过程;而Java反序列化是指把字节序列恢复为Java对象的过程。从而达到网络传输、本地存储的效果。 本文主要要看看JDK中使用Serializable和Externalizable接口来完成Java对象序列化,并给出部分属性序列化的几种方式,最终做出Serializable和Externalizable接口的几个方面的对比。 注:本文不讨论为什...

不积跬步无以至千里,不积小流无以成江河 450

java中序列化的两种接口Serializable和Externalizable

摘要: 本文主要要看看JDK中使用Serializable和Externalizable接口来完成Java对象序列化,并给出部分属性序列化的几种方式,最终做出Serializable和Externalizable接口的几个方面的对比。 Java序列化是指把Java对象转换为字节序列的过程;而Java反序列化是指把字节序列恢复为Java对象的过程。从而达到网络传输、本地存储的效果。 本文主要要看看JDK中使用Serializable和Externalizable接口来完成Java对象序列化,并给出部分属性序列

roddger1的博客 508

『Java安全』类的序列化与反序列化基础_Serializable接口和Externalizable接口的区别

# Java序列化的方式 Java序列化有三种方式: 1. 实现`java.io.Serializable`接口 2. 实现`java.io.Externalizable`接口、重写`writeExternal()`和`readExternal()`方法 3. 实现`java.io.Serializable`接口、**严格添加**`private void writeObject(ObjectOutputStream stream) throws IOException{}`和`private vo

Ho1aAs‘s Blog 1416
上一篇: linux小知识
下一篇: Java对String字符串对象的创建,管理和“+”运算符的实现
eagullx
博客等级 码龄19年 8粉丝 9原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值