我知道这个问题之前已经解决了,但无论我怎么努力,我都找不到答案。 我试图在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;
}
由于
答案 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
}
}