如何更新文件中包含的序列化HashMap?

时间:2019-06-28 12:59:36

标签: java serialization

我有一个文件,该文件包含序列化的HashMap,该序列包含MyObject类型的元素:

�� sr java.util.HashMap���`� F 
loadFactorI     thresholdxp?@     w      t (a54d88e06612d820bc3be72877c74f257b561b19sr  com.myproject.MyObject C�m�I�/ I  partitionL hashcodet Ljava/lang/String;L idt Ljava/lang/Long;L offsetq ~ L    timestampq ~ L topicq ~ xp    q ~ ppppx

现在,我还有其他一些MyObject对象想要添加到该地图中。但是,我不想先将地图读取并反序列化回内存中,然后对其进行更新,然后将整个更新后的地图写回到文件中。如何以一种更有效的方式更新文件中的序列化?

1 个答案:

答案 0 :(得分:5)

  

如何以一种更有效的方式更新文件中的序列化?

基本上是通过反向工程将对象序列化为二进制表示形式时Java使用的二进制协议。这样一来,您就可以了解该二进制Blob中的哪些元素需要以哪种方式进行更新。

其他人已经这样做了,例如,参见here

其他任何事情都可以。您坐下来编写代码。

或者您编写几行代码来读取现有文件,并使用该映射 plus 在那里写一个新文件,并在其中添加所需的其他对象。

您知道,效率取决于观点:

  • 您认为包含二进制序列化对象的文件的单个更新是否如此紧迫,因此需要通过手动“修补”该二进制文件来完成
  • 您认为花费数小时来学习底层二进制格式,正确更新其内容是否更有效?

的正当理由(我能想到)为什么这样做:确切地了解以下内容:二进制数据格式以及如何修补内容。但是即使那样,也可能有比“花费更多时间重新实现Java二进制序列化”更多的见解(在现实世界中具有实际价值)为您提供了更多的见解。