反序列化的Java问题

时间:2015-08-09 05:17:49

标签: java file io deserialization

我知道这个问题之前已经解决了,但无论我怎么努力,我都找不到答案。 我试图在Java中序列化和反序列化对象。我在反序列化方面遇到了问题。我没有得到输入的值,但有些内容与prueba.Estudiantes@1bd7848相符。为什么我得到这个而不是输入的实际值?

这是我的代码

package prueba;

import java.io.*;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Prueba {


public static void main(String[] args) throws FileNotFoundException,IOException, ClassNotFoundException {
    File file = new File("f.txt");
    List <Estudiantes> lista = new ArrayList<>();
    boolean continuar = true;
    while (continuar == true){
    Estudiantes es = new Estudiantes();
    System.out.println("Ingrese nombre");
    Scanner kb = new Scanner(System.in);
    es.nombre = kb.nextLine();
    System.out.println("Ingrese Apellido");
    Scanner kb1 = new Scanner(System.in);
    es.apellido = kb1.nextLine();
    System.out.println("Ingrese Número");
    Scanner kb2 = new Scanner(System.in);
    es.numero = kb2.nextInt();
    lista.add(es);

    FileOutputStream fo = new FileOutputStream(file);
    ObjectOutputStream output = new ObjectOutputStream(fo);

    for (Estudiantes est: lista){
        output.writeObject(est);
    }
    output.close();
    fo.close();


    FileInputStream fi = new FileInputStream(file);
    ObjectInputStream input = new ObjectInputStream(fi);
    ArrayList<Estudiantes> est2 = new ArrayList<Estudiantes>();
    try {
        while (true){
            Estudiantes s = (Estudiantes)input.readObject();
            est2.add(s);
        }
    }
    catch (EOFException ex){}
    for (Estudiantes s :est2){
        System.out.println(s);
    fi.close();
    input.close();
        }

    System.out.println("0 para salir; 1 para continuar");
    Scanner kb3 = new Scanner(System.in);
    int rev = kb3.nextInt();

    if (rev == 0){
        continuar = false;
        System.out.println("Hasta Luego");
    } 
    }
   }
 }

这是我的Estudiantes课程

package prueba;

import java.io.Serializable;

public class Estudiantes implements Serializable{
    String nombre, apellido;
    int numero;

}

由于

3 个答案:

答案 0 :(得分:0)

  

我没有得到输入的值,但有些内容与prueba.Estudiantes@1bd7848

相符

当你明确地或隐含地在类没有覆盖它的对象上调用toString()时,你得到的就是这样。

没有证据表明您有问题。

答案 1 :(得分:0)

我认为如果你得到像prueba.Estudiantes@1bd7848这样的值,你就已经被反序列化了。您只需要正确覆盖toString()以获取输出。不确定这是否有帮助

答案 2 :(得分:-1)

当您在回读之前编写的对象时尝试打印类时,必须从Object类实现toString()方法,这就是我的意思。 将您的班级更改为:

public class Estudiantes implements Serializable {
    private static final long serialVersionUID = 123L; // has to be unique
    String nombre, apellido;
    int numero;

    @Override
    public String toString() {
        System.out.println("first name: " + nombre);
        System.out.println("last name:  " + apellido);
        System.out.println(numero);
        return // a string you want to print
    }
}