当前位置: 首页 > 面试题库 >

自制与Java序列化

韩欣怿
2023-03-14
问题内容

我有一个需要保留在数据库中的POJO,当前设计将其字段指定为单个字符串列,并且不能在表中添加其他字段。

意思是,对象需要以某种方式进行序列化。因此,仅就基本实现而言,我去设计了自己的对象的序列化形式,这意味着将其所有字段连接到一个不错的字符串中,并用我选择的定界符分隔。但这很丑陋,并且会引起问题,例如其中一个字段包含我的定界符。

因此,我尝试了基本的Java序列化,但是从我进行的基本测试来看,这在某种程度上变成了一项非常昂贵的操作(构建ByteArrayOutputStream,ObjectOutputStream等,对于反序列化而言也是如此)。

那我有什么选择呢?序列化对象以进入数据库的首选方式是什么?

编辑:
这将是我项目中非常常见的操作,因此必须将开销保持在最低水平,而性能至关重要。另外,第三方解决方案也不错,但无关紧要(通常会产生我要避免的开销)


问题答案:

Elliot Rusty Harold
在他的XOM库中提出了一个反对将Java
Object序列化用于对象的不错的论点。同样的原则也适用于您。内置的Java序列化是特定于Java的,易碎且缓慢的,因此最好避免。

使用基于字符串的格式时,您大概有正确的主意。正如您指出的那样,问题在于您正在遇到定界符的格式/语法问题。解决方案是使用已构建的格式来处理此问题。如果这是标准格式,那么您还可以潜在地使用其他库/语言来对其进行操作。同样,基于字符串的格式意味着您仅希望通过查看数据就可以理解它。二进制格式删除该选项。

XML和JSON是两个不错的选择。它们是标准化的,基于文本的,灵活的,易读的,并且具有很多库支持。它们的性能也会出奇的好(有时甚至比Java序列化还要
)。



 类似资料:
  • 上一小节我们学习了 Java 的输入输出流,有了这些前置知识点,我们就可以学习 Java 的序列化了。本小节将介绍什么是序列化、什么是反序列化、序列化有什么作用,Serializable 接口以及 Externalizable 接口,常用序列化工具介绍等内容。 1. 序列化与反序列化 序列化在计算机科学的数据处理中,是指将数据结构或对象状态转换成可取用格式,以留待后续在相同或另一台计算机环境中,能

  • 问题内容: 我有一个对象,其中包含一些要序列化的不可序列化字段。它们来自我无法更改的单独API,因此使它们可序列化不是一种选择。主要问题是Location类。它包含我需要的四个可以序列化的东西,所有整数。如何使用read / writeObject创建可以执行以下操作的自定义序列化方法: 我怎样才能做到这一点? 问题答案: Java支持自定义序列化。阅读“自定义默认协议”部分。 去引用: 但是,有

  • 问题内容: 《 有效的Java》 和其他资源这本书对使用可序列化Java类时如何以及何时使用readObject()方法提供了很好的解释。另一方面,readResolve()方法仍然有点神秘。基本上,我发现的所有文档都只提到了两者之一,或者只单独提到了两者。 仍未解决的问题是: 两种方法有什么区别? 什么时候应采用哪种方法? 应该如何使用readResolve(),尤其是在返回什么方面? 希望您能

  • 我正在试验Stanford CoreNLP库,我想序列化主要的StanfordCoreNLP管道对象,尽管它抛出了一个java.io.NotSerializableException。 完整故事:每当我运行我的实现时,将管道注释器和分类器加载到内存中大约需要15秒。最终进程的内存约为600MB(很容易小到可以存储在我的机箱中)。我想在第一次创建管道后保存它,这样我就可以在以后将其读入内存。 然而,

  • 本文向大家介绍Java中对象序列化与反序列化详解,包括了Java中对象序列化与反序列化详解的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Java中对象序列化与反序列化。分享给大家供大家参考。具体如下: 一、简介 对象序列化(Serializable)是指将对象转换为字节序列的过程,而反序列化则是根据字节序列恢复对象的过程。 序列化一般用于以下场景: 1.永久性保存对象,保存对象的字节序列

  • 如题目所述,想请教一下大佬们在Java中序列化与反序列化的意义是什么,如何理解Java的序列化和反序列化?