Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/338.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将复杂映射序列化到磁盘?_Java_Caching - Fatal编程技术网

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
当然也可以)。该库按预期工作,无论如何,对于我的简单持久性任务来说,它有点过头了。该库按预期工作,无论如何,对于我的简单持久性任务来说,它有点过头了。