Serialization & ObjectOutputStream
Buenas, tengo el siguiente problema: tengo que guardar gran cantidad de Objectos en un archivo y java me esta dando un error de memory overflow.
Por ejemplo:
OutputStream ostream = new FileOutputStream("test.tmp");
ObjectOutputStream out = new ObjectOutputStream();
for(int k=0;k<10000000;k++)
out.writeObject(new Integer(k));
La unica forma que encontre de solucionarlo es cerrando el ObjectOutputStream y creando uno nuevo que haga append sobre el mismo archivo (asi libera la memoria como se debe).
El problema con esto, es que al crear un nuevo ObjectOutputStream y guardar un nuevo Integer, se vuelve a guardar la descripcion del 'Integer' en el archivo (la cual YA existia en la escritura anterior)... y al recuperar los objetos del archivo, da error (pues se encuentra 2 veces con la descripcion de Integer).
Alguna idea?
Gracias,
Diego
Por ejemplo:
OutputStream ostream = new FileOutputStream("test.tmp");
ObjectOutputStream out = new ObjectOutputStream();
for(int k=0;k<10000000;k++)
out.writeObject(new Integer(k));
La unica forma que encontre de solucionarlo es cerrando el ObjectOutputStream y creando uno nuevo que haga append sobre el mismo archivo (asi libera la memoria como se debe).
El problema con esto, es que al crear un nuevo ObjectOutputStream y guardar un nuevo Integer, se vuelve a guardar la descripcion del 'Integer' en el archivo (la cual YA existia en la escritura anterior)... y al recuperar los objetos del archivo, da error (pues se encuentra 2 veces con la descripcion de Integer).
Alguna idea?
Gracias,
Diego
Mi consejo es que esos Integer los guardes en un vector, y ese vector sea el objeto que escribas en el flujo.
El problema es que si uso un vector, este tiene que estar en memoria, y eso da memory overflow.
Entoces conforme lo tienes despues de cada escritura usa [flujo].flush() que descargas el flujo de memoria y confirmas la escritura en el fichero
