import java.io.*;
import java.util.*;
class Paper
{
    private String code;
    private String name;
    private Date examDay;
    Paper(String c,String n,Date d)
    {
        code=c;
        name=n;
        examDay=d;
    }
};public class examPaper
{
    public static void main(String[] args)
    {
        try
        {
            Paper[] paper=new Paper[2];
            paper[0]=new Paper("2003048097","cq",new Date(2005,5,8));
            paper[1]=new Paper("2003048097","cq",new Date(2005,5,8));
            ObjectOutputStream out=new ObjectOutputStream(new FileOutputStream("2003972.txt"));
            out.writeObject(paper);
            out.close();
            ObjectInputStream in=new ObjectInputStream(new FileInputStream("2003972.txt"));
            Paper[] newPaper=(Paper[])in.readObject();
            for(int i=0;i<newPaper.length;i++)
            {
                System.out.println(newPaper[i]);
            }
        }
        catch(Exception e)
        {
            System.out.print("Error:"+e);
            System.exit(1);
        }
    }
}
==========================================================================
是关于对象串行化和并行化的
编译没有问题,运行出现异常:Error:java.io.NotSerializableException: Paper
我实在是不明白什么原因,大虾们帮帮看看!谢谢了! 

解决方案 »

  1.   

    class Paper
    -->
    class Paper implements Serializable
      

  2.   

    欲将某个Object串行化,并在未来的某一时刻并行化恢复(此所谓的持久机制),必须对所需操作的Object实现Serializable或者Externalizable接口之一,而Serializable接口更为普遍,并且其为某Object可被串行化的最低要求,该接口没有定义任何方法,乃是一个标记接口,用来提示JVM实现其接口的Object均可被安全的串行化。
        这里所抛出的NotSerializableException就是没有继承实现自此接口的关系,修改您的class Paper
    源代码如下:
    /**
     *: ExamPaper.java
     * 一个实验,接口继承自Serializable接口,
     * 用以实现JAVA的持久化功能。
     * 以下代码测试通过,环境为JDK1.4
     */import java.io.*;
    import java.util.*;
    /**
     * 该类接口继承了Serializable接口,
     * 实验将围绕该类展开。
     */
    class Paper implements Serializable { 
      // 为了实验方便将fields均该为friendly
      String code;
      String name;
      Date examDay;
      // Constructor
      Paper( String c, String n, Date d ) {
        code = c;
        name = n;
        examDay = d;
      }
    }
    public class ExamPaper {
      /**
       * 该方法实例化多个Paper object,将其串行化并保存至 2003972.txt 文件中,
       * 然后在必要时将其还原(这里我们很快的将其还原)。
       */
      public static void main( String[] args ) {
        try {
          // Initialize many Paper objects.
          Paper[] oldPaper = new Paper[2];
          oldPaper[0] = new Paper( "2003048097", "cq", new Date(2005,5,8) );
          oldPaper[1] = new Paper( "2003048097", "cq", new Date(2005,5,8) );
          // Display old Paper objects.
          System.out.println( "Old objects:\n" );
          for( int i = 0; i < oldPaper.length; i++ ) {
           System.out.println( "old paper[" + i + "] is " + oldPaper[i] );
           System.out.println( "  code: " + oldPaper[i].code );
           System.out.println( "  name: " + oldPaper[i].name );
           System.out.println( "  day : " + oldPaper[i].examDay );
           System.out.println();
          }
          
          // 开始串行化
          ObjectOutputStream out = 
            new ObjectOutputStream(
              new FileOutputStream(
              "2003972.txt"));
          
          out.writeObject( oldPaper );
          out.close();      // 恢复
          ObjectInputStream in =
            new ObjectInputStream(
              new FileInputStream(
              "2003972.txt"));
          
          Paper[] newPaper = (Paper[])in.readObject();
          
          // Display new Paper objects.
          System.out.println( "----------------------------------------" );
          System.out.println( "New objects:\n" );
          for( int i = 0; i < newPaper.length; i++ ) {
            System.out.println( "new paper[" + i + "] is " + newPaper[i] );
            System.out.println( "  code: " + newPaper[i].code );
            System.out.println( "  name: " + newPaper[i].name );
            System.out.println( "  day : " + newPaper[i].examDay );
            System.out.println();
          }
        } catch( Exception e ) {
          System.out.print( "Error:" + e );
          System.exit(1);
        }
      }
    } /// @.@||~另外要注意的是,如果被串行化的对象中拥有对其他对象的引用,那么希望保证串行化成功的前提是必须保证其引用的其他类型均接口实现了Serializable接口,否则就要考虑是否使用关键字transient来使得某些对象不被串行化。
      

  3.   

    class Paper implements Serializable