Как сериализовать сложную карту на диск? - PullRequest
0 голосов
/ 11 марта 2019

У меня есть простой кэш памяти, используя 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.

Ответы [ 2 ]

1 голос
/ 11 марта 2019

Вы можете написать свои собственные методы для сериализации и десериализации объектов. Обратите внимание на использование библиотеки 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
    }
}
1 голос
/ 11 марта 2019

Вы можете посмотреть на MapDB .

Это именно то, что вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...