Как записать несколько объектов в файл? - PullRequest
1 голос
/ 20 октября 2011

Я хочу записать несколько объектов в файл, но проблема в том, что у меня нет всех объектов для записи одновременно.Я должен написать один объект, а затем закрыть файл, а затем, возможно, через некоторое время я хочу добавить другой объект в тот же файл.

В настоящее время я делаю это как FileOutputStream("filename", true), чтобы он добавлял объектдо конца файла и не перезаписывать его.Но я получаю эту ошибку:

java.io.StreamCorruptedException: недопустимый код типа: AC

есть идеи, как решить эту проблему?

Спасибо,

Ответы [ 3 ]

3 голосов
/ 20 октября 2011

Один из вариантов - сегментировать файл на отдельные сообщения. Если вы хотите написать сообщение, сначала сериализуйте его в ByteArrayOutputStream. Затем откройте файл для добавления с помощью DataOutputStream - запишите длину с помощью writeInt, затем запишите данные.

Когда вы читаете из потока, вы открываете его с помощью DataInputStream, затем неоднократно вызываете readInt, чтобы найти длину следующего сообщения, затем readFully, чтобы прочитать само сообщение. Поместите сообщение в ByteArrayInputStream и затем десериализуйте из этого.

В качестве альтернативы используйте более приятный формат сериализации, чем встроенная Java-сериализация - я фанат Protocol Buffers , но существует множество альтернатив. На мой взгляд, встроенная сериализация слишком хрупкая.

2 голосов
/ 20 октября 2011

Вам нужно serialize / deserialize List<T>. Взгляните на этот поток переполнения стека.

2 голосов
/ 20 октября 2011

Вы не можете добавлять разные ObjectOutputStreams к одному и тому же файлу.Вам придется использовать другую форму сериализации или прочитать файл и записать все объекты, а также новые объекты в новый файл.

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