zoukankan      html  css  js  c++  java
  • ObjectOutputStream 追加写入读取错误

     本篇博客灵感来自http://blog.csdn.net/chenssy/article/details/13170015

     问题描述、问题出现的原因、尝试解决办法,请参见鄙人上一编博客。

    上一编文章解决ObjectOutputStream 追加写入读取错误问题的方法是自定义了一个ObjectOutputStream子类,我觉得不如用匿名内部类实现方便,于是自我研究写出以下两种方案。个人更推崇方案二

    方案一:

     1 package packa;
     2 
     3 import java.io.*;
     4 
     5 class ObjectInputOutputStream2
     6 {
     7     public static void main(String[] args)throws Exception
     8     {
     9         writeObj();
    10         readObj();
    11     }
    12 
    13     private static void writeObj()throws Exception
    14     {
    15         final File f = new File("person.object");
    16         ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("person.object", true))
    17         {
    18             protected  void writeStreamHeader()throws IOException
    19             {
    20                 if (!f.exists() || (f.exists() && 0 == f.length()))
    21                 {
    22                     super.writeStreamHeader();
    23                 }
    24             }
    25         };
    26 
    27         oos.writeObject(new Person("liu", 30, "kr"));
    28         oos.writeObject(new Person2("liu", "kr", "kr2"));
    29         oos.writeObject(new Person3(10, 30, 50));
    30 
    31         oos.close();
    32     }
    33 
    34     private static void readObj()throws Exception
    35     {
    36         ObjectInputStream ois = new ObjectInputStream(new FileInputStream("person.object"));
    37 
    38         try
    39         {
    40             while(true)
    41             {
    42                 System.out.println(ois.readObject());    
    43             }
    44         }
    45         catch (Exception e)
    46         {
    47             System.out.println(e.toString());
    48         }
    49 
    50         ois.close();
    51     }
    52 }

    方案二:

     1 package packa;
     2 
     3 import java.io.*;
     4 
     5 class ObjectInputOutputStream
     6 {
     7     public static void main(String[] args)throws Exception
     8     {
     9         writeObj();
    10         readObj();
    11     }
    12 
    13     static ObjectOutputStream  getObjectOutputStreamInstance(final OutputStream os, final File f) throws IOException
    14     {
    15         return  new ObjectOutputStream(os)
    16         {
    17             protected  void writeStreamHeader()throws IOException
    18             {
    19                 if (!f.exists() || (f.exists() && 0 == f.length()))
    20                 {
    21                     super.writeStreamHeader();
    22                 }
    23             }
    24         };
    25     }
    26 
    27     private static void writeObj()throws Exception
    28     {
    29         ObjectOutputStream oos = getObjectOutputStreamInstance(new FileOutputStream("person.object", true), new File("person.object"));
    30         oos.writeObject(new Person("liu", 30, "kr"));
    31         oos.writeObject(new Person2("liu", "kr", "kr2"));
    32         oos.writeObject(new Person3(10, 30, 50));
    33 
    34         oos.close();
    35     }
    36 
    37     private static void readObj()throws Exception
    38     {
    39         ObjectInputStream ois = new ObjectInputStream(new FileInputStream("person.object"));
    40 
    41         try
    42         {
    43             while(true)
    44             {
    45                 System.out.println(ois.readObject());    
    46             }
    47         }
    48         catch (Exception e)
    49         {
    50             System.out.println(e.toString());
    51         }
    52 
    53         ois.close();
    54     }
    55 }
     1 package packa;
     2 
     3 import java.io.*;
     4 
     5 class Person implements Serializable
     6 {
     7     public static final long serialVersionUID = 44L;
     8 
     9     String name;
    10     transient int age;
    11     static String country = "cn";
    12 
    13     Person(String name, int age, String country)
    14     {
    15         this.name = name;
    16         this.age = age;
    17         this.country = country;
    18     }
    19 
    20     public String toString()
    21     {
    22         return name + " " + age + " " + country;
    23     }
    24 
    25 }
    26 class Person2 implements Serializable
    27 {
    28     public static final long serialVersionUID = 45L;
    29 
    30     String name;
    31     String country;
    32     String country2;
    33 
    34     Person2(String name, String country, String country2)
    35     {
    36         this.name = name;
    37         this.country = country;
    38         this.country2 = country2;
    39     }
    40 
    41     public String toString()
    42     {
    43         return name + " " + country + " " + country2;
    44     }
    45 
    46 }
    47 class Person3 implements Serializable
    48 {
    49     public static final long serialVersionUID = 46L;
    50 
    51     int age;
    52     int age2;
    53     int age3;
    54 
    55     Person3(int age, int age2, int age3)
    56     {
    57         this.age = age;
    58         this.age2 = age2;
    59         this.age3 = age3;
    60     }
    61 
    62     public String toString()
    63     {
    64         return age + " " + age2 + " " + age3;
    65     }
    66 
    67 }
  • 相关阅读:
    关于springboot项目使用yml类型的配置文件
    关于个人电脑连不上公司svn服务器,显示拒绝访问的错误
    改变思考问题的方式——SQL排序查询
    FreeMarker入门级
    个人电脑安装svn实录
    tomcat配置虚拟路径,可以解决实际开发中测试时前端访问后台电脑上的图片的问题
    springmvc的运行原理个人见解
    [CF915F] Imbalance Value of a Tree
    [CF768G] The Winds of Winter
    [BZOJ4241] 历史研究
  • 原文地址:https://www.cnblogs.com/LiuYanYGZ/p/6115965.html
Copyright © 2011-2022 走看看