gpt4 book ai didi

Java序列化-Android反序列化

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:01:55 25 4
gpt4 key购买 nike

我尝试过在 Java 和 Android 之间实现跨平台序列化。我使用了 Serializable,并将我在 Android 中的代码与桌面 Java 中的代码放在同一个包中。

来源:java-desktop 序列化

    Student student=new Student(); 
student.setName("John");
student.setSurname("Brown");
student.setNumber(776012345);

try {
FileOutputStream fout = new FileOutputStream("thestudent.dat");
ObjectOutputStream oos = new ObjectOutputStream(fout);
oos.writeObject(student);
oos.close();
}
catch (Exception e) { e.printStackTrace(); }

}

来源:Android - 反序列化

File file=new File(getExternalFilesDir(null), "thestudent.dat");

try {

FileInputStream fint = new FileInputStream(file);
ObjectInputStream ois = new ObjectInputStream(fint);
Student stud=(Student) ois.readObject();
ois.close();
}
catch (Exception e) { e.printStackTrace(); }

}

Student是一个类,实现了Serializable。在桌面上,我将学生实例序列化为“thestudent.dat”。我把这个文件放在 Android 设备的 SD 卡上,我正在尝试反序列化它。我收到错误 java.lang.ClassCastException: javaserializace.Student。但为什么?序列化时我有相同的包,反序列化时我有相同的包。所有不同的是项目名称。您看到任何解决方案了吗?

已编辑 - 学生类的来源:

public class Student implements Serializable {

private String name;
private String surname;
private int number;
private char gender;
private int age;
private long rc;
private int id;

public Student(){
;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

public char getGender() {
return gender;
}

public void setGender(char gender) {
this.gender = gender;
}

public int getId() {
return id;
}

public void setId(int id) {
this.id = id;
}

public long getRc() {
return rc;
}

public void setRc(long rc) {
this.rc = rc;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getNumber() {
return number;
}

public void setNumber(int number) {
this.number = number;
}

public String getSurname() {
return surname;
}

public void setSurname(String surname) {
this.surname = surname;
}

}

最佳答案

我确定两边的 Student 的两个版本是不一样的。

因为异常是

java.lang.ClassCastException: javaserializace.Student.

这表明 Java 已成功反序列化对象,但在接收方将其类型转换为 Student 时,它抛出异常,因为类型不相同。

一种快速调试方法是在接收到的 Student 对象上调用 getClass() 并在接收器上的 Student 类上调用 getName() 。我确信在这种情况下两者是不同的。

解决方案是确保接收端的 Student 是同一类型。

关于Java序列化-Android反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7528342/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com