在 Java 中序列化是存储和稍后访问(少量)数据的最佳/最简单的方法吗?

Posted

技术标签:

【中文标题】在 Java 中序列化是存储和稍后访问(少量)数据的最佳/最简单的方法吗?【英文标题】:Is serializing in Java the best/easiest way to store and later access (a small amount of) data? 【发布时间】:2017-06-02 23:29:29 【问题描述】:

我对 Java 比较陌生,并且对 Matlab 有更多的经验。我想知道最好的方法是存储相对少量的数据,这些数据已经在一个程序中计算出来,应该在另一个程序中使用。

示例:程序 A 计算要存储在数组中的 100 个值。现在我想在程序 B 中访问这个数组,因为它需要这些值。当然,我可以只写一个程序,它也实现了A部分。但是,现在每次我想执行整个程序时,都必须重新计算所有值(在A部分中),这是一个资源浪费。在 Matlab 中,我能够轻松地将数组保存在 .mat 文件中,并将其加载到不同的脚本中。

环顾四周寻找答案,我找到了序列化选项 (What is object serialization? ),我认为这适合做我想做的事。我的问题:序列化是在 Java 中存储少量数据的最简单、最快捷的解决方案,还是有更快、更用户友好的选项(如 Matlab 中的 .mat 文件)?

【问题讨论】:

如果你想稍后访问它,那么我假设你必须将它存储在磁盘上。并且任何存储在磁盘上的东西都会被序列化,没有别的办法。 您可以写出纯文本或 csv 之类的,而不是对象序列化。我认为纯文本文件最接近 .mat。 序列化将您与特定的类实现联系起来。随着您更改代码和类的发展,其序列化形式也会发生变化。 @litelite 我的答案适用于任何形式的序列化。随着对象的变化,序列化的形式也会发生变化。通常最好以某种格式保存相关数据,而不是将其绑定到对象实现。 @litelite 您似乎将序列化与持久性混合在一起。并非世界上所有写入的数据都是序列化的,而且您不会在 OP 链接的答案中找到您的定义,因为那是在谈论对象序列化。 【参考方案1】:

我认为您有多种选择来完成这项工作。 Java 对象序列化是一种可能的方式。从我的角度来看,还有其他选项可以序列化数据:

Write and read 一个用于存储计算值的简单文本文件。 使用 Java 架构进行 XML 绑定 (JAXB) 将带注释的 Java 类写入 XML 文件。 JSON 也是如此。 使用轻量级数据库,如 SQLite 或 HSQLDB(原生 Java 数据库)。 使用Apache Thrift 或Protocol Buffer 将Java 对象反序列化/序列化为文件。

【讨论】:

这些都是序列化的。只是没有内置序列化程序。 @litelite 你是对的,但这没有帮助。我们可以同意这些是不同形式的序列化,其中一些比其他更适合 OP 的情况,可以吗? @Fildor 是的,当然,我只是想指出答案的编写方式似乎其他选项实际上不是序列化。 @litelite 我希望你现在同意我的更新文本:-)

以上是关于在 Java 中序列化是存储和稍后访问(少量)数据的最佳/最简单的方法吗?的主要内容,如果未能解决你的问题,请参考以下文章

2022-01-25:序列化和反序列化 N 叉树。 序列化是指将一个数据结构转化为位序列的过程,因此可以将其存储在文件中或内存缓冲区中,以便稍后在相同或不同的计算机环境中恢复结构。 设计一个序列化和反

ARM - 如何从存储帐户获取访问密钥,以便稍后在模板中的 AppSettings 中使用?

java 数组

java 序列化 - 持久化类定义

如何将 pid 的值保存在数据结构中并稍后使用 fork() 访问它?

序列化的本质