Java 如何将复杂映射序列化到磁盘?
我有一个使用Java 如何将复杂映射序列化到磁盘?,java,caching,Java,Caching,我有一个使用ConcurrentHashMap的简单内存缓存。我想让缓存在重启后继续运行。意味着,在关机时,我想将内容写入本地磁盘。在应用程序启动时,我想将本地内容读入缓存映射 我不需要在本地磁盘缓存上进行任何查询查找 //simple key-value store private final Map<String, Wrapper> cache = new ConcurrentHashMap<>(); public static class Wrapper {
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;
}
}
//简单键值存储
私有最终映射缓存=新ConcurrentHashMap();
公共静态类包装器{
公开上市交易;
公共LocalDateTime时间戳;
公共静态类事务{
公共字符串请求;
公共字符串响应;
}
}
问题:您能推荐一个现有的库,它可以简单地将如此复杂的映射
写入/读取到本地文件吗
我曾考虑将整个内容序列化为json
对象,但由于我需要在应用程序重新启动时读取缓存,所以性能很重要。使用json可能不是最好的选择。您可以查看
它正是你想要的。你可以看看
它完全满足您的需要。您可以编写自己的方法来序列化和反序列化对象。请注意使用from库写入文件和读取文件
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
}
}
您可以编写自己的方法来序列化和反序列化对象。请注意使用from库写入文件和读取文件
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
}
}
不错,如果已经在类路径上,甚至可以使用
org.apache.commons.lang3.SerializationUtils
,从字节转换为字节。这可能比仅仅为持久性任务添加一个额外的库要好得多(而mapdb
当然也能工作)。很好,如果已经在类路径上,甚至可以使用org.apache.commons.lang3.SerializationUtils
从字节转换到字节。这可能比仅仅为持久性任务添加一个额外的库要好得多(而mapdb
当然也可以)。该库按预期工作,无论如何,对于我的简单持久性任务来说,它有点过头了。该库按预期工作,无论如何,对于我的简单持久性任务来说,它有点过头了。