Один из вариантов - сегментировать файл на отдельные сообщения. Если вы хотите написать сообщение, сначала сериализуйте его в ByteArrayOutputStream
. Затем откройте файл для добавления с помощью DataOutputStream
- запишите длину с помощью writeInt
, затем запишите данные.
Когда вы читаете из потока, вы открываете его с помощью DataInputStream
, затем неоднократно вызываете readInt
, чтобы найти длину следующего сообщения, затем readFully
, чтобы прочитать само сообщение. Поместите сообщение в ByteArrayInputStream
и затем десериализуйте из этого.
В качестве альтернативы используйте более приятный формат сериализации, чем встроенная Java-сериализация - я фанат Protocol Buffers , но существует множество альтернатив. На мой взгляд, встроенная сериализация слишком хрупкая.