Java 中可序列化和外部化有什么区别?

2024-01-21

有什么区别Serializable http://java.sun.com/javase/6/docs/api/java/io/Serializable.html and Externalizable http://java.sun.com/javase/6/docs/api/java/io/Externalizable.html在Java中?


要添加到其他答案,请执行java.io.Serializable,您可以获得类对象的“自动”序列化功能。不需要实现任何其他逻辑,它就可以工作。 Java 运行时将使用反射来确定如何编组和解组对象。

在 Java 的早期版本中,反射非常慢,因此序列化大型对象图(例如在客户端-服务器 RMI 应用程序中)会产生一些性能问题。为了处理这种情况,java.io.Externalizable提供了接口,就像java.io.Serializable但使用自定义编写的机制来执行编组和解组功能(您需要实现readExternal and writeExternal类中的方法)。这为您提供了绕过反射性能瓶颈的方法。

在最新版本的 Java(当然是 1.3 以后)中,反射的性能比以前好得多,因此这不再是一个问题。我怀疑你很难从中获得有意义的好处Externalizable使用现代 JVM。

此外,内置的 Java 序列化机制并不是唯一的机制,您还可以使用第三方替代品,例如 JBoss Serialization,它的速度要快得多,并且是默认值的直接替代品。

一个很大的缺点是Externalizable是你必须自己维护这个逻辑 - 如果你添加、删除或更改类中的字段,你必须更改你的writeExternal/readExternal方法来解释它。

总之,Externalizable是 Java 1.1 时代的遗迹。真的没有必要再这样了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java 中可序列化和外部化有什么区别? 的相关文章

随机推荐

  • 具有可选参数的方法

    有没有一种方法可以使方法可以接受参数 但也可以在没有参数的情况下调用 在这种情况下 参数被视为nil像下面这样 some func variable some func def some func variable nil end
  • AngularJS 主页的多个 ng-views

    好吧 我是 Angluar 的新手 刚刚开始使用 ngRoute 和 ngView 指令 我遇到了一些对我来说是问题的问题 但我怀疑这只是一个问题 因为我缺乏 Angluar 的经验 我的 index html 页面上有以下标记 简化 di
  • Mercurial MSSCCAPI 提供商?

    有人知道 Mercurial 的 MSSCCAPI 提供商吗 我想使用 PowerBuilder 尝试 Kiln Mercurial 但 PowerBuilder IDE 只识别 MSSCCAPI 提供程序 即not与 MS SCC Pac
  • Microsoft Edge 请求后退/前进按钮上的新页面

    单击后退和前进按钮时 最新版本的 Microsoft Edge 浏览器 41 162 会请求新页面 我在多个平台上测试了多个浏览器 只有 Edge 表现出这种行为 这是一个测试页 http www easynotecards com sta
  • aws sagemaker模型训练中是否有某种持久的本地存储?

    我用aws sagemaker做了一些实验 从S3下载大数据集的时间是非常有问题的 特别是当模型仍处于开发阶段 并且你想要某种相对较快的初始反馈时 是否有某种本地存储或其他方式来加快速度 EDIT我指的是批量训练服务 它允许您以 Docke
  • 为什么 Flask 会话的值必须是 JSON 可序列化的?

    我正在尝试在 Flask 应用程序中为用户会话实例化一个基本模型实例 我对我的类必须是 JSON 可序列化的要求感到措手不及 我认为会话字典只是存储会话信息的任意构造 但听起来它的使用有更多限制 其中之一显然是 JSON 可序列化的值 还有
  • 可继承的版本 Maven 插件规则

    跑步时mvn versions display dependency updates为了版本 Maven 插件 https www mojohaus org versions maven plugin 我看到很多这样的事情 INFO org
  • 角度分量的类型

    我可以将角度组件类称为类型吗 我看到 Ionic 的用途any对于组件 在 Typescript 中是否可以声明一个仅需要组件类的参数类型 我看到了这个问题 但组件在构造函数中没有任何共同点 将类作为参数传递会导致 不可更新 错误 http
  • 如何将消息从后台服务发布到 UI 片段?

    我有一个问题EventBus来自绿色机器人 我试图从我的同步适配器的后台服务发布一个事件 并将其捕获在一个片段中以更新 UI 问题是 当我尝试从同步适配器发布事件时 我在调试日志中收到以下内容 No subscribers register
  • R闪亮:如何将本地图像放入闪亮的表中

    如果图像存储在我的机器上 我似乎无法在表格中显示图像 如果图像由 URL 指定 我可以让它工作 但我不知道有什么简单的方法来 提供 图像 以便可以通过 URL 找到它 而不是仅使用图像文件名并放置文件与 ui R 和 server R 位于
  • C++ std::filesystem::filesystem_error 试图读取系统卷信息等异常

    我正在尝试解决在尝试递归遍历根驱动器中的所有文件 如 C D 等 时引发的异常 我在 Mingw64 上使用 GCC 编译器版本 9 3 0 尝试读取系统卷信息时出现 std filesystem filesystem error 示例输出
  • CSS 过渡表格行高

    我有一个 CSS 表 所有行的高度相同 但当用户单击其中一行时 所选行应占据整个表格高度 其余行应逐渐消失 我通过简单的设置就可以工作display none在所有其他行上 但我想做一些过渡 我尝试过设置max height到 100 然后
  • 如何使用boto3通过另一个帐户的SQS订阅一个帐户的SNS主题?

    我正在尝试在一个帐户中创建一个 SNS 主题并将其附加到配置规则 我有 3 个这样的帐户 并且想在每个帐户中创建 SNS 主题 现在我想通过第四个帐户的SQS订阅3个不同帐户的所有3个主题 我可以手动完成 有人可以告诉我如何通过 boto3
  • google-apps-script 更改列格式

    需要格式化列 c e 和其他一些列 以使用以下格式显示日期 2014 年 7 月 4 日 不知道该怎么做 谷歌脚本新手 要使用 Apps 脚本执行此操作 您可以使用设置数字格式 数字格式 https developers google co
  • SSL 是如何工作的?

    我知道这不是一个具体的问题 但我阅读了这个主题大约一个小时 但找不到任何有关它的基本信息 SSL 是如何工作的 什么是私钥和公钥 为什么必须在公司购买证书以及自己签署证书有什么区别 到底什么是这样的证书 我读过几个网站 维基百科信息 Sta
  • Python:减少字典的内存使用

    我正在尝试将几个文件加载到内存中 这些文件具有以下 3 种格式之一 字符串 TAB 整型 字符串 TAB 浮点数 int TAB 浮点数 事实上 它们是 ngram 静态文件 以防这有助于解决问题 例如 i love TAB 10 love
  • Angular 2 - 服务在调用方法之前消耗其他服务

    我有这样的场景 后端 json devServer http server1 proServer http server2 use devServer 全局服务 ts import Injectable from angular core
  • 在哪里可以找到 C++11 标准论文? [复制]

    这个问题在这里已经有答案了 可能的重复 在哪里可以找到当前的 C 或 C 标准文档 https stackoverflow com questions 81656 where do i find the current c or c sta
  • FFMPEG API:如何使用 av_open_input_file 连接到 RTSP 流?

    我正在尝试使用 av open input file 连接到一些 RTSP 流 如下所示 AVFormatContext ic avcodec register all av register all av open input file
  • Java 中可序列化和外部化有什么区别?

    有什么区别Serializable http java sun com javase 6 docs api java io Serializable html and Externalizable http java sun com jav