为了账号安全,请及时绑定邮箱和手机立即绑定

如何序列化复杂的磁盘映射?

如何序列化复杂的磁盘映射?

白板的微信 2022-08-03 16:44:10
我有一个简单的内存缓存使用.我希望该缓存在重新启动后继续存在。这意味着,在关机时,我想将内容写入本地磁盘。在应用程序启动时,我想将本地内容读入缓存映射中。ConcurrentHashMap我不需要在本地磁盘缓存上进行任何查询查找。//simple key-value storeprivate final Map<String, Wrapper> cache = new ConcurrentHashMap<>();public static class Wrapper {    public List<Transaction> transactions;    public LocalDateTime timestamp;    public static class Transaction {        public String request;        public String response;    }}问题:你能建议一个现有的库,可以简单地将如此复杂的内容写入/读取到本地文件吗?Map我考虑过将整个内容序列化为对象,但是由于我需要在应用程序重新启动时读取该缓存,因此性能很重要。使用json可能不是最好的选择。json
查看完整描述

2 回答

?
繁花如伊

TA贡献2012条经验 获得超12个赞

您可以编写自己的方法来序列化和反序列化对象。请注意,使用共享资源 IO 库中的 FileUtils 来写入文件和读取文件。


public void serializeAndWriteToFile(Object o) {

    try {

        ByteArrayOutputStream baos = new ByteArrayOutputStream();

        ObjectOutputStream oos = new ObjectOutputStream(baos);

        oos.writeObject(o);

        FileUtils.writeByteArrayToFile(new File("D:\\Test.txt"), baos.toByteArray());

    } catch (IOException ioe) {

        // Handle exception

    }

}


public void readFromFileAndDeserialize() {

    try {

        ByteArrayInputStream bais = new ByteArrayInputStream(FileUtils.readFileoByteArray(new File("D:\\Test.txt")));

        ObjectInutStream ois = ne ObjectInutStream(bais);

        Object o = ois.readObject();

        // Type cast o to your object before using it

    } catch (IOException | ClassNotFoundException e) {

        // Handle exception

    }

}


查看完整回答
反对 回复 2022-08-03
?
HUX布斯

TA贡献1876条经验 获得超6个赞

你可以看看MapDB

它完全符合您的要求。


查看完整回答
反对 回复 2022-08-03
  • 2 回答
  • 0 关注
  • 106 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号