2010-07-13 13 views
5

Estoy tratando de leer todos los objetos almacenados en un archivo * .ser y almacenarlos en una matriz de objetos. ¿Cómo puedo obtener la cantidad de objetos almacenados en ese archivo (para que pueda declarar que la matriz es number_of_objects de largo)?Cómo contar el número de objetos almacenados en un archivo * .ser

He comprobado la API y no he podido encontrar una función deseable.

operación -Editar-
una parte del código:

Ser[] objTest2 = new Ser[number_of_objects]; 
for(int i=0; i<=number_of_objects, i++) { 
    objTest2[i] = (Ser)testOS2.readObject(); 
    objTest2[i].printIt(); 
} 
+1

¿Qué es un archivo '* .ser'? – jjnguy

+0

Un archivo que almacena objetos serializados (no conozco la terminología adecuada, es mi primera semana con java). – MoonStruckHorrors

+0

Ok, bueno, lo que seguro quiere es la interfaz 'List'. La implementación específica será 'ArrayList'. – jjnguy

Respuesta

3

Lo que se quiere tener en cuenta es la clase ArrayList.

Básicamente es una matriz en crecimiento dinámico.

Se pueden añadir elementos a ella de este modo:

ArrayList list = new ArrayList(); 
list.add(someObject); 
list.add(anotherBoject); 

La lista crecerá a medida que agrega nuevos elementos a ella. Entonces no tiene que saber el tamaño antes de tiempo.

Si necesita obtener una matriz si la Lista al final puede usar el método toArray() de la Lista.

Object[] arr = list.toArray(new Object[list.size()]); 

Editar:
Aquí es una implementación general de lo que necesita:

List<Ser> objTest2 = new ArrayList<Ser>(); 
while (testOS2.available > 0) { 
    Ser toAdd = ((Ser)testOS2.readObject()); 
    toAdd.printIt(); 
    objTest2.add(toAdd); 
} 

* No creo available() es una prueba confiable para si o no hay más bytes a leer.

+0

No creo que lo necesite aquí. Aquí hay una parte del código. -edited- código agregado en la publicación principal. – MoonStruckHorrors

+1

@MoonStruckHorros Lo necesita (pero agrega genéricos). Necesita deserializar la secuencia para encontrar el número de objetos (de nivel superior) (a menos que almacene esa información en algún lugar adelante)./En general, deberían evitarse las matrices de referencias; use 'List' en su lugar. –

+0

'disponible()' no es de ninguna manera una prueba para el final del archivo. Ver el Javadoc. La forma correcta de detectarlo aquí es capturar 'EOFException'. – EJP

-1

Simplemente siga leyendo objetos hasta que obtenga EOFException. Para eso es para eso. Y use un List en lugar de una matriz, por lo que no necesita el conteo por adelantado.

+0

¿Algo malo con esta respuesta? – EJP

-1
while(true) 
{ 

     try 
     { 
     Employee e=(Employee) ois.readObject(); 
     System.out.println("successfully deserialized.........showing details of object."); 
     e.display(); 
     } 

     catch(Exception e) 
     { 
      if(e instanceof java.io.EOFException) 
      { 
      System.out.println("All objects read and displayed"); 
      break; 
      } 
      else 
      { 
       System.out.println("Some Exception Occured."); 
       e.printStackTrace(); 

      } 
     } 
} 
+1

'EOFException' debe capturarse por separado, no detectarse de esta manera. El simple código no es una respuesta: tienes que explicarlo. – EJP

Cuestiones relacionadas