Java对象序列化文件追加并读取方案

本文介绍了如何在Java中解决对象序列化追加写入时被覆盖的问题。通过创建序列化空文件并截取头部信息,实现了追加序列化对象到文件。该方法适用于数据持久化,尤其是自定义延迟队列的持久化支持,提供了一个无需第三方插件、支持多线程的解决方案。项目源码可在GitHub找到,并提供了配置和使用说明。
摘要由CSDN通过智能技术生成

近几天打算使用Delayed接口自定义实现一个简单的延迟队列功能,想把任务数据进行一个持久化的实现,但是又不想依赖数据库,又或者其他的第三方工具进行持久化的操作,就考虑到直接持久化到文件中。

而持久化到文件中又考虑到两种方案,一种是使用JSON追加保存,另一种是将对象进行序列化保存。最后,考虑到性能问题选择了序列化的方式。

在处理的过程中发现对象序列化不能像普通文件一样直接进行追加对象,每次写入对象都会被覆盖。

如果想把数据对象进行追加的话,最简单粗暴的方法就是。在追加序列化对象之前,先将对象读取出来,然后封装到一个list集合中,将新的对象添加在list集合里面,将整个集合进行一个序列化的保存。

虽然以上的方案确实可以实现序列化的追加被覆盖的问题,每次在储存对象的时候,都需要将整个对象集合读取出来再写入进去,数据量少的情况下还没啥影响,但是数据量大的时候太消耗性能了,那还不如直接转换成JSON格式储存好了。

最终,根据各种途径的资料查询发现。Java默认的对象序列化是每次都会写入一个头部aced 0005(占4个字节),然后每次读取都是读完头部然后再读取内容。

解决方案就是就储存文件数据之前,先创建一个空的序列化文件,将头部标记在文件中。在写入对象的时候,将对象中的4个头部字节aced 0005截取掉,就可以将对象写入到文件中,并实现了追加的功能。

实现Serializable接口对象

java复制代码
@Data
@AllArgsConstructor
public class Student implements Serializable {

    private String name;
    
    priva
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值