import java.io.*;
class ObjectStream implements Serializable{
        //保存对象
        public static void saveObject(String fileName,Object obj){
                try{
                FileOutputStream fi=new FileOutputStream(fileName+".txt");
                ObjectOutputStream os=new ObjectOutputStream(fi);
                os.writeObject(obj);
                os.flush();
                }catch(Exception e){System.out.println("savaObject Error");}
        }
        //提取对象
        public static Object openObject(String fileName){
                ObjectInputStream oiT=null;
                try{
                        FileInputStream fs=new FileInputStream(fileName+".txt");
                        ObjectInputStream oi=new ObjectInputStream(fs);
                        return (Object)oi.readObject();
                }catch(Exception e){System.out.println("OpenObject Error");}
                System.out.println("Error");
                return oiT;
        }
}
class TestObject{
        static int i=1;
        public TestObject(){
                System.out.println("OK");
        }
        public static void main(String args[]){
                ObjectStream.saveObject("testObject",new TestObject());        
                System.out.println(ObjectStream.openObject("testObject").toString());        
        }
}
为什么保存对象时总是扔出异常呀。
谁能告诉我ObjectInputStream readObject()具体使用方法呀?

解决方案 »

  1.   

    应该是TestObject implements Serializable,谁调用这个方法谁就实现Serializable接口
      

  2.   

    将public static void saveObject(String fileName,Object obj)
    改为:
    public static void saveObject(String fileName,Serializable obj)因为:要序列化的对象必须要实现:Serializable接口。另外:
    class TestObject{ 要加上:class TestObject implements Serializable
      

  3.   

    是要让被保存的对象实现Serializable
      

  4.   

    被保存对象要Serializable,
    为什么要Serializable呢?
    因为实现serializable接口的作用是就是可以把对象存到字节流,然后可以恢复!
    所以你想如果你的对象没实现序列化怎么才能进行网络传输呢,要网络传输就得转为字节流,所以就得实现序列化
    所以你必须implements Serializable这样。
      

  5.   

    实现Serializable这个接口,虽然这个接口没人任何的抽象方法,但是这是一个标示接口,只有实现了这个接口的类才能表示可以实现序列化
      

  6.   

    明显的有问题,你给ObjectStream序列化,但是读写的对象却是TestObject,
    但是你的TestObject又没有序列化,所以当然会有错误咯!
    import java.io.*; class TestObject implements Serializable{ 
       public static void saveObject(String fileName,Object obj){ 
               try{ 
               FileOutputStream fi=new FileOutputStream(fileName+".txt"); 
               ObjectOutputStream os=new ObjectOutputStream(fi); 
               os.writeObject(obj); 
               os.flush(); 
               }catch(Exception e){System.out.println("saveObject Error");} 
       } 
       //提取对象 
       public static Object openObject(String fileName){ 
               ObjectInputStream oiT=null; 
               try{ 
                       FileInputStream fs=new FileInputStream(fileName+".txt"); 
                       ObjectInputStream oi=new ObjectInputStream(fs); 
                       return (Object)oi.readObject(); 
               }catch(Exception e){System.out.println("OpenObject Error");} 
               System.out.println("Error"); 
               return oiT; 
       } 
            static int i=1; 
            public TestObject(){ 
                    System.out.println("OK"); 
            } 
            public static void main(String args[]){ 
                    saveObject("testObject",new TestObject());        
                    System.out.println(openObject("testObject").toString());        
            } 

      

  7.   

    类通过实现 java.io.Serializable 接口以启用其序列化功能。未实现此接口的类将无法使其任何状态序列化或反序列化。可序列化类的所有子类型本身都是可序列化的。序列化接口没有方法或字段,仅用于标识可序列化的语义。
      

  8.   

    六楼是正确的,你只需要把implements Serializable写在被操作的类(TestObject)后即可。而ObjectStream 后无需序列化,此类只是操作类。import java.io.*; 
    class ObjectStream { 
            //保存对象 
            public static void saveObject(String fileName,Object obj){ 
                    try{ 
                    FileOutputStream fi=new FileOutputStream(fileName+".txt"); 
                    ObjectOutputStream os=new ObjectOutputStream(fi); 
                    os.writeObject(obj); 
                    os.flush(); 
                    }catch(Exception e){System.out.println("savaObject Error");} 
            } 
            //提取对象 
            public static Object openObject(String fileName){ 
                    ObjectInputStream oiT=null; 
                    try{ 
                            FileInputStream fs=new FileInputStream(fileName+".txt"); 
                            ObjectInputStream oi=new ObjectInputStream(fs); 
                            return (Object)oi.readObject(); 
                    }catch(Exception e){System.out.println("OpenObject Error");} 
                    System.out.println("Error"); 
                    return oiT; 
            } 

    public class TestObject implements Serializable{ 
            static int i=1; 
            public TestObject(){ 
                    System.out.println("OK"); 
            } 
            public String toString()
            {
             return getClass().getName();
            }
            public static void main(String args[]){ 
                    ObjectStream.saveObject("testObject",new TestObject());        
                    System.out.println(ObjectStream.openObject("testObject"));        
            } 
      

  9.   

    学到swing,下一项技术就是网络编程,到时候好好体会下      。。!