本帖最后由 cloudeagle_bupt 于 2013-08-20 16:25:53 编辑

解决方案 »

  1.   

    package serial;import java.io.*;public class SerialTest { /**
     * @param args
     * @throws Exception 
     */
    public static void main(String[] args) throws Exception {
    // TODO Auto-generated method stub Employee e1 = new  Employee( " zhangsan " , 25 , 3000.50 );   
            Employee e2 = new  Employee( " lisi " , 24 , 3200.40 );   
            Employee e3 = new  Employee( " wangwu " , 27 , 3800.55 );   
               
            FileOutputStream fos = new  FileOutputStream("employee.txt");   
            ObjectOutputStream oos = new  ObjectOutputStream(fos);   
            oos.writeObject(e1);   
            oos.writeObject(e2);   
            oos.writeObject(e3);   
            oos.close(); 
            
            FileInputStream fis = new  FileInputStream("employee.txt");   
            ObjectInputStream ois = new  ObjectInputStream(fis);           Employee e;   
            for ( int  i = 0 ;i < 3 ;i ++ )   
            {   
               e = (Employee)ois.readObject();   
               System.out.println(e.name + " : " + e.age + " : " + e.salary);   
            }   
            ois.close();   
    }
    }class Employee implements Serializable{
    String name;   
        int  age;   
        double  salary;
        transient Thread t = new Thread();
        
        
        public  Employee(String name, int  age, double  salary)   
        {   
            this .name = name;   
            this .age = age;   
            this .salary = salary;   
       }   
        
        private   void  writeObject(java.io.ObjectOutputStream oos)  throws  IOException   
        {   
           oos.writeInt(age);   
           oos.writeUTF(name);   
           System.out.println( " Write Object " );   
       }   
        private   void  readObject(java.io.ObjectInputStream ois)  throws  IOException   
        {   
           age = ois.readInt();   
           name = ois.readUTF();   
           System.out.println( " Read Object " );   
       }   
    }
    比如这段代码,请问在序列化后写入硬盘上时,是按照什么编码格式呢?
    是unicode么?
      

  2.   

    你的问题好奇怪。一般unicode编码是指字符的编码。java对象序列化后,该对象能转换成字节流在网络上传输和存储在硬盘上,在网络上的另一端能接收到字节流并把它转换成原来的对象,存在硬盘上的对象能用ObjectInputStream 读取该对象。
      

  3.   


    我的理解是:
     1. 在内存中Java字符串值的存储方式是unicode,硬盘上存字符的话,可以是unicode编码或者utf8或者其他编码方式。
     2. 序列化的话,是将对象转换成字节流在网络间或者进程间传输。可是在传输的时候,字节流也是有自己的2进制编码的吧,这里的编码是unicode么?  还是utf8呢/ 
      

  4.   

    比如在上面的代码中:writeObject是将Employ这个对象自身写入字节流的方法
    readObject是组装字节流中的被序列化的参数值,e = (Employee)ois.readObject();   这行就是将读出来的字节流的值强制转换成Employee对象。
    以上是一种基于字节流的对象的写入和组装。 但是,在字节流传输的过程中,其编码使用的是什么呢? 是unicode么? 请大神给指点下。
      

  5.   

    你到底知道不知道什么叫编码。字节流都是0101了还有个P的编码。
    private String abcd = "abcd"才有编码。
    如果说0101如何变回"abcd"而不是"????",那是你操作系统和jdk的默认编码。
      

  6.   


    不好意思,确实不懂,请问在序列化的过程中,比如这个函数:
        private   void  writeObject(java.io.ObjectOutputStream oos)  throws  IOException   
        {   
           oos.writeInt(age);    // 请问这里将一个整形写入字节流中,这里不知道用什么编码方式写入字节流?
           oos.writeUTF(name);   //这里是将name字符串以utf的编码写入字节流
           System.out.println( " Write Object " );   
       }  请问上面注释的地方理解的对么?
      
      

  7.   

    1. Java对象在内存中的形式都是unicode编码么? 和存在硬盘上的有区别么?
    内存中就是01,硬盘上一般不存对象吧,存的是class。2. Java对象序列化后的二进制编码是什么编码呢? 这个可以自己设置么(比如修改成utf-8)?
    这个是不可以的,也没什么用, 序列化只是规定个拆分和组装的顺序而已(个人理解)3. unicode和utf系列编码的关系,
    这个可以百度一下。
      

  8.   


    非常感谢诸位的指点,重新理解了下,应该是这样的:
    1. 编码这些应该是针对字符而言的,整形及数值这些是不需要编码的。因此,无论是硬盘中还是内存中,虽然存的都是二进制码,但是字符的编码方式可以是utf9,unicode等等。2. 序列化只是一种将对象写入字节流的方法而已。可以自己去定义对象的拆分和组装,对象中的字符,写入字节流时,可以选择编码方式,其他的数值型的话,可以直接序列化。