Galera, estou tendo um pequeno problema na serialização de objetos. Eu sei que o uso de serialização não é recomendado em muitos casos, mas neste caso… é preciso.
[list] :arrow: Ao escrever os objetos, ele não esvazia o buffer e, dependendo do volume de objetos, gera OutOfMemory, utilizando o seguinte código:
...
oos.writeObject(objeto);
oos.flush();
...
Procurei na especificação e verifiquei que nem sempre o flush realmente esvazia o buffer, para solucionar, fecho o ObjectOutputStream de tempos em tempos e abro novamente (com o truque do NoHeaderOutputStream para appendar os objetos)
Minha dúvida, há alguma outra maneira de solucinar?[/list]
[list] :arrow: Ao abrir o arquivo que serializei, preciso saber quantos objetos há dentro do ObjectInputStream. Procurei no javadoc e pelo Google mas não obtive sucesso. A única maneira que consegui resolver isso foi percorrendo todo o stream (mas isso acarreta queda de performance e pode gerar um OutOfMemoryError) na bufferização do Stream.
Uma alternativa seria eu gravar no arquivo também quantos registros eu gravei lá, suponha que eu faça o seguinte:
...
long quantos = 0;
oos.writeLong(quantos);
...
Iterator i = ...;
for (; i.hasNext; quantos++) {
oos.writeObject(i.next());
oos.flush();
}
...
Minha dúvida? Há algum seek ou algo do tipo para que eu possa sobrescrever o long que escrevi no começo do arquivo?[/list]
Obrigado!