java中使用ObjectInputStream的readObject()获取文件中信息都为空

连滚带爬的菜鸟 2020-09-23 05:29:57
//Person类
public class Person implements Serializable{
private String name;
private int age;
private char gender;
private double salary;
private List<String> otherInfo;

public Person(String string, int i, char c, int j, List<String> list) {
super();
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
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 double getSalary() {
return salary;
}
public void setSalary(double salary) {
this.salary = salary;
}
public List<String> getOtherInfo() {
return otherInfo;
}
public void setOtherInfo(List<String> otherInfo) {
this.otherInfo = otherInfo;
}
@Override
public String toString() {
return name + "," + age + "," + gender + "," + salary + ","+ otherInfo;
}

}

//写入order.txt
public class writeDemo {
public static void main(String[] args) throws IOException {
List<String> list = new ArrayList<String>();
list.add("家住上海");
list.add("汉族");
list.add("其它信息");
Person p = new Person("战三",22,'男',2000,list);
System.out.println("开始序列化...");
FileOutputStream fos = new FileOutputStream("order.txt");
ObjectOutputStream oos = new ObjectOutputStream(fos);
//将list和Person信息写入文件中
oos.writeObject(p);
System.out.println("序列化完成...");
oos.close();

}
}

//读取order.txt
public class Readtest {
public static void main(String[] args) throws IOException, ClassNotFoundException {
FileInputStream fis = new FileInputStream("order.txt");
ObjectInputStream ois = new ObjectInputStream(fis);
Person P = (Person)ois.readObject();
System.out.println(P); //???没有读取到数据
ois.close();
}
}

最终我Readtest 读到的是如下的结果,我是哪个位置写错了吗?求大神指教一下,非常感谢!
null,0,口,0.0,null
...全文
3099 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
KeepSayingNo 2020-09-24
  • 打赏
  • 举报
回复
oos.flush(); 文件的读取有一个缓冲区的概念,读完之后,都要刷一下,这个刷就是flush
  • 打赏
  • 举报
回复
引用 1 楼 qybao的回复:
System.out.println("序列化完成..."); oos.flush(); //这里加一句试试,防止数据还在输出流缓存里,没完全写入文件 oos.close();
嗯嗯,一个小的细节问题,另外就是Person构造方法没赋值,加上后就正常了,感谢感谢!!!
m0_57667098 2021-08-05
  • 举报
回复
@连滚带爬的菜鸟 大佬,遇到同样问题 ,没解决Person p = new Person("战三",22,'男',2000,list);这个不是赋值了嘛
  • 举报
回复
@m0_57667098 实体类 构造方法中没有进行this.xxx=xxx的赋值操作哈
  • 打赏
  • 举报
回复
嗯嗯,一个小的细节问题,另外就是Person构造方法没赋值,加上后就正常了,感谢感谢!!!
qybao 2020-09-23
  • 打赏
  • 举报
回复
System.out.println("序列化完成..."); oos.flush(); //这里加一句试试,防止数据还在输出流缓存里,没完全写入文件 oos.close();

50,523

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧