elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Como proteger una cartera - billetera de Bitcoin


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  Java
| | | |-+  Problema al leer objetos con ObjectInputStream
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Problema al leer objetos con ObjectInputStream  (Leído 4,487 veces)
peib0l
Wiki

Desconectado Desconectado

Mensajes: 3.493


freedom


Ver Perfil WWW
Problema al leer objetos con ObjectInputStream
« en: 5 Marzo 2015, 14:38 pm »

Buenos días resulta que ya estoy un poco harto de errores raros y no se de donde me vienen tengo problemas al leer objetos, mi lógica me dice que esta bien, pero me salta error

Código
  1.        java.io.EOFException
  2.        at java.io.ObjectInputStream$BlockDataInputStream.peekByte(ObjectInputStream.java:2601)
  3. at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1319)
  4. at java.io.ObjectInputStream.readObject(ObjectInputStream.java:371)
  5. at Principal.importarProductos(Principal.java:101)
  6. at Principal.main(Principal.java:26)
  7.  


Con este método leo los objetos
Código
  1. private static void importarProductos(){
  2. ArrayList<Producto> arrayAuxiliar = new ArrayList<Producto>();
  3. ObjectInputStream ois = null;
  4. Object aux = null;
  5. try {
  6. ois = new ObjectInputStream(new FileInputStream("./estanteria.obj"));
  7.  
  8. aux = ois.readObject();          
  9.  
  10. while (aux!=null)
  11. {
  12.    if (aux instanceof Producto)
  13.        System.out.println(aux);
  14.    aux = ois.readObject();
  15. }
  16.  
  17.  
  18. } catch (FileNotFoundException e) {
  19. e.printStackTrace();
  20. System.out.println("es del fichero");
  21. } catch (IOException e) {
  22. e.printStackTrace();
  23. System.out.println("es IO");
  24. } catch (ClassNotFoundException e) {
  25. e.printStackTrace();
  26. System.out.println("de la clase si que no");
  27. }finally{
  28. try{
  29. ois.close();
  30. }catch(IOException f){}
  31. }
  32.  
  33. }
  34.  


Este es el metodo que uso para Guardarlos:
Código
  1. private static void exportaProductos(ArrayList p){
  2. ObjectOutputStream fichero = null;
  3. try {
  4. fichero = new ObjectOutputStream(new FileOutputStream("./estanteria.obj"));
  5. for(int x = 0; x<p.size(); x++){
  6. fichero.writeObject(p.get(x));
  7. }
  8. } catch (FileNotFoundException e) {
  9. e.printStackTrace();
  10. } catch (IOException e) {
  11. e.printStackTrace();
  12. }finally{
  13. try{
  14. fichero.close();
  15. }catch(IOException f){}
  16.  
  17. }
  18. }
  19.  



En línea

Usuario Invitado


Desconectado Desconectado

Mensajes: 625



Ver Perfil
Re: Problema al leer objetos con ObjectInputStream
« Respuesta #1 en: 5 Marzo 2015, 15:57 pm »

EOFException indica que se ha llegado al final de un archivo y ya no hay nada más que leer. Por lo que si tu no pones una condición que se lea mientras haya objetos en el archivo, obviamente se va a leer hasta que se llegue al final del archivo, y como no hay ya objetos, no se podrá leer por lo que lanzará un EOFException.


Deberías leer tu fichero así:

Código
  1. private List<Product> readProducts() {
  2. List<Product> products = null;
  3. Logger logger = Logger.getLogger(Principal.class.getName());
  4. new FileInputStream("./estanteria.obj"))) {
  5.                products = new ArrayList<>();
  6. Product product = null;
  7. while( (product = (Product) reader.readObject() ) != null ) {
  8. Product product = (Product) reader.readObject();
  9. products.add(product);
  10. }
  11. } catch(IOException ioex) {
  12. logger.warn(ioex.getMessage());
  13. }
  14.        return products;
  15. }

Como puedes ver no es que sean "erorres raros". Java tiene un amplio número de Excepciones para que el programador pueda ver el fallo con precisión. Tan solo basta analizar el rastreo de pila y darás con el problema.

Otra cosa, ¿estás usando Java 6? Lo digo porque usas Generics como en Java 6:

Código
  1. List<Product> products = new ArrayList<Product>();

En Java 7+, esto se hace:

Código
  1. List<Product> products = new ArrayList<>();

Si usas Java 6, te recomiendo que empieces a usar Java 8.

Saludos.


« Última modificación: 5 Marzo 2015, 16:01 pm por Gus Garsaky » En línea

"La vida es muy peligrosa. No por las personas que hacen el mal, si no por las que se sientan a ver lo que pasa." Albert Einstein
peib0l
Wiki

Desconectado Desconectado

Mensajes: 3.493


freedom


Ver Perfil WWW
Re: Problema al leer objetos con ObjectInputStream
« Respuesta #2 en: 5 Marzo 2015, 17:37 pm »

Muchas Gracias Gus, me vas a tener que dar unas clases de Java para actualizarme.
En línea

Usuario Invitado


Desconectado Desconectado

Mensajes: 625



Ver Perfil
Re: Problema al leer objetos con ObjectInputStream
« Respuesta #3 en: 5 Marzo 2015, 18:14 pm »

Será un placer ayuda en lo que pueda. Soy Java evangelist xDDD
En línea

"La vida es muy peligrosa. No por las personas que hacen el mal, si no por las que se sientan a ver lo que pasa." Albert Einstein
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[Duda C#] Problema con visivilidad de objetos
.NET (C#, VB.NET, ASP)
~~ 2 3,269 Último mensaje 8 Octubre 2007, 14:01 pm
por ~~
Obtener información de varios objetos al leer archivo serializado
Java
Aikanáro Anário 4 14,171 Último mensaje 11 Febrero 2012, 03:56 am
por Aikanáro Anário
Problema con objetos.
Java
ThePinkPanther 4 2,830 Último mensaje 15 Marzo 2014, 22:28 pm
por ThePinkPanther
guardar y leer objetos en archivos binarios
Java
victor garay 1 3,878 Último mensaje 17 Abril 2015, 06:51 am
por Usuario Invitado
Escribir y leer de un fichero con objetos. « 1 2 »
Java
Fryuio 14 6,613 Último mensaje 22 Abril 2017, 16:55 pm
por Fryuio
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines