我正在学习Java并运行一些问题来恢复对象中的序列化数据。我编写这段代码的方法和尝试适用于另一个项目的做法一样,但对象数据返回为null。序列化对象返回null Java
输出示例: 序列化数据保存在item.ser中 文件存在!!! 反序列化项目...... 项目@ 7ef20235 SKU:0 名称:空 价格:0.0 征税:空 数量:0
import java.io.*;
public class demo {
public static void main(String[] args) {
item i = new item("1234", "Guarana", 0.94, true, 1);
try {
FileOutputStream fileOut =
new FileOutputStream("item.ser");
ObjectOutputStream out = new ObjectOutputStream(fileOut);
out.writeObject(i);
out.close();
fileOut.close();
System.out.println("Serialized data is saved in item.ser");
} catch (IOException e) {
e.printStackTrace();
}
try {
File F = new File("item.ser");
if (F.exists() && !F.isDirectory()) {
System.out.println("File Exist!!!");
}
FileInputStream fileIn = new FileInputStream("item.ser");
ObjectInputStream in = new ObjectInputStream(fileIn);
item restore= (item) in.readObject();
in.close();
fileIn.close();
System.out.println("Deserialized item...");
System.out.println(restore);
System.out.println("Sku: "+restore.Sku);
System.out.println("Name: "+ restore.getName());
System.out.println("Price: "+restore.Price);
/* if(ret.tax.toString()=="true"){
System.out.println("Item is taxed");
}else{
System.out.println("Item is not taxed");
}*/
System.out.println("Is taxed: "+restore.tax);
System.out.println("Quantity: "+restore.qty);
} catch (IOException err) {
err.printStackTrace();
return;
} catch (ClassNotFoundException c) {
System.out.println("Employee class not found");
c.printStackTrace();
return;
}
}
}
//class item
import java.io.Serializable;
/**
* Created by diogowatson on 26/07/17.
*/
public class item implements Serializable{
String PorN;
int Sku;
String Name;
double Price;
Boolean tax;
int qty;
public item(String s, String apple, double v, boolean b, int i) {
}
public void item(){}
public void item (String p, int s, String n, double pr, boolean t, int q){
PorN=p;
Sku=s;
Name=n;
Price=pr;
tax=t;
qty=q;
}
public int getSku(){
return Sku;
}
public String getName(){
return Name;
}
public void PrinItem(){
System.out.println("Sku: "+ Sku);
System.out.println("name: "+ Name);
System.out.println("Price: "+Price);
System.out.println("Is taxed: "+ tax);
System.out.println("Quantity: "+qty);
}
}
编码不干净。类名和方法名相同。应该在'class'名字中首先输入大写字母。并且您的构造函数不会传递对象字段上的任何内容。这就是为什么你得到空。 – msagala25
'item @ 7ef20235 Sku:0名称:null价格:0.0征税:null数量:0'不为空。它是'item'类型的对象,其*内容*为空。 – EJP
@DiogoAndrade如果用户回答你的问题,也请接受他的回答([接受答案:它是如何工作的?](https://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-工作))。如果不是,请说明还没有答案,这是StackOverflow非常重要的一部分,非常感谢。 – Zabuza