作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个使用 ConcurrentHashMap 的简单内存缓存。我希望该缓存能够在重新启动后继续存在。意味着,在关闭时我想将内容写入本地磁盘。在应用程序启动时,我想将本地内容读入缓存映射。
我不需要在本地磁盘缓存上进行任何查询。
//simple key-value store
private 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 可能不是最好的。
最佳答案
您可以编写自己的方法来序列化和反序列化对象。注意 FileUtils 的使用来自Commons IO用于写入文件和从文件读取的库。
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
}
}
关于java - 如何将复杂的Map序列化到磁盘?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55102400/
我是一名优秀的程序员,十分优秀!