A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 月夜小楠 中级黑马   /  2014-11-2 20:47  /  1430 人查看  /  1 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 月夜小楠 于 2014-12-30 12:23 编辑
  1. import java.io.*;
  2. class Person implements Serializable
  3. {
  4. private String name;
  5. String age;
  6. static String country = "cn";
  7. Person(String name,String age)
  8. {
  9. this.name = name;
  10. this.age = age;
  11. }
  12. public void setName(String name)
  13. {
  14. this.name = name;
  15. }
  16. public String getName()
  17. {
  18. return name;
  19. }
  20. public void setAge(String age)
  21. {
  22. this.age = age;
  23. }
  24. public String getAge()
  25. {
  26. return age;
  27. }
  28. public int hashCode()
  29. {
  30. return name.hashCode()+Integer.parseInt(age)*18;
  31. }
  32. public boolean equals(Object obj)
  33. {
  34. if (!(obj instanceof Person))
  35. {
  36. return false;
  37. }
  38. Person p = (Person)obj;
  39. return this.name.equals(p.name)&&this.age.equals(p.age);
  40. }
  41. public String toString()
  42. {
  43. return name+":"+age+":"+country;
  44. }
  45. }
  46. class ObjStreamDemo
  47. {
  48. public static void main(String[] args) throws IOException,ClassNotFoundException
  49. {
  50. writeObj();//将对象写入到person.txt文件中。
  51. readObj();//将person.txt文件中的对象打印到控制台上。
  52. }
  53. public static void readObj() throws IOException,ClassNotFoundException
  54. {
  55. ObjectInputStream ois = new ObjectInputStream(
  56. new FileInputStream("person.txt"));
  57. Object obj = null;
  58. while ((obj=ois.readObject())!=null )
  59. {
  60. if (!(obj instanceof Person))
  61. {
  62. throw new RuntimeException ("对象错误");
  63. }
  64. Person p = (Person) obj;
  65. System.out.println(p);
  66. }
  67. ois.close();
  68. }
  69. public static void writeObj() throws IOException
  70. {
  71. ObjectOutputStream oos = new ObjectOutputStream(
  72. new FileOutputStream("person.txt"));
  73. oos.writeObject(new Person("lisi","39"));
  74. oos.writeObject(new Person("wangwu","40"));
  75. oos.writeObject(new Person("sunliu","50"));
  76. oos.flush();
  77. oos.close();
  78. }
  79. }
复制代码


运行结果是正确的,但会报出以下异常:
Exception in thread "main" java.io.EOFException
        at java.io.ObjectInputStream$BlockDataInputStream.peekByte(ObjectInputSt
ream.java:2601)
        at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1319)
        at java.io.ObjectInputStream.readObject(ObjectInputStream.java:371)
        at ObjStreamDemo.readObj(ObjStreamDemo.java:58)
        at ObjStreamDemo.main(ObjStreamDemo.java:51)


评分

参与人数 1黑马币 +1 收起 理由
杨佳名 + 1

查看全部评分

1 个回复

倒序浏览
和readLine的原理不同,读到文件尾就抛出异常
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马