Java 反序列化问题

Java Problems With 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");
    } 
    }
   }
 }

这是我的学生 class

package prueba;

import java.io.Serializable;

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

}

谢谢

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

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
    }
}

I do not get the values that were entered, but something along the lines of prueba.Estudiantes@1bd7848

这就是在 class 未覆盖的对象上显式或隐式调用 toString() 时得到的结果。

这并不能证明你有问题。

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