сериализация и десериализация нескольких объектов Java в одном файле - PullRequest
1 голос
/ 03 июня 2011

У меня есть сценарий, в котором у меня есть несколько объектов HashMap, которые необходимо сохранить в одном текстовом файле. например:

    a.put("01jan", 13);
    a.put("02feb", 13);
    a.put("03march", 13);
    a.put("04apr", 13);
    a.put("05may", 13);

    b.put("06june", 12);
    b.put("07july", 12);
    b.put("08aug", 12);
    b.put("09sept", 12);
    b.put("10oct", 12);

Я хотел бы использовать сериализацию Java для сохранения объектов в одном и том же текстовом файле. Есть ли способ сделать это один за другим, я пытался использовать FileOutputStream( file_name,true). Также, когда я пытаюсь получить объекты, скажите HashMap b сейчас и HashMap a, когда возникнет такая необходимость. Есть ли способ достичь этого? Как получить out of order объекты и получить правильный объект?

Спасибо, Бхавья

Ответы [ 4 ]

7 голосов
/ 03 июня 2011

Вы можете поместить все объекты hashmap в ArrayList и затем сериализовать объект ArrayList.Позже, когда вы отмените реализацию объекта ArrayList, вы можете вернуть отдельные объекты HashMap:

List<HashMap> list = new ArrayList<HashMap>();
list.add(a);
list.add(b);

// serialize the list object
2 голосов
/ 03 июня 2011

Если у вас есть много карт для хранения, карты используют пару ключ / значение, поэтому я бы посоветовал хранить данные в формате ключ / значение. JSON - это читаемый человеком взаимозаменяемый формат, основанный на ключе / значении. Его можно сохранить в файле, и вы можете использовать JSONObject ( javadoc ) или GSON для сериализации / десериализации данных.

Пример:

{"hashmap1": 
    [
        {"01jan": 13}, 
        {"02feb": 13}, 
        {"03march", 13}
    ]
}
1 голос
/ 03 июня 2011

Нет никакого преимущества в извлечении объектов из порядка, просто сохраняйте все данные на диск и, когда вам это нужно, загружайте все данные с диска. Если размер файла не превышает 64 КБ, это не имеет значения.

Если ваши данные больше, вы можете поместить a и b в отдельные файлы, но вряд ли это будет иметь разницу в несколько миллисекунд, но сделает ваш код более сложным.

FileOutputStream (имя_файла, true)

Вы не можете добавлять ObjectOutputStream в файл. Когда вы прочитаете данные обратно, вы получите только первое. (Вы можете получить данные с большой болью, но лучше не пытаться)

0 голосов
/ 03 июня 2011

Другой подход - поместить каждый HashMap в качестве записи в Zip-архив.

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