请教达人: 关于序列化和Unicode

飞火流云 2013-08-20 04:06:19
之前有几个问题一直没搞懂。

1. Java对象在内存中的形式都是unicode编码么? 和存在硬盘上的有区别么?

2. Java对象序列化后的二进制编码是什么编码呢? 这个可以自己设置么(比如修改成utf-8)?

3. unicode和utf系列编码的关系,一直没明白,最简单的,内存上和硬盘上存的Java对象的值,是以什么方式存的呢? unicode? utf编码? 还是啥?

对此一直非常困惑。
...全文
146 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
飞火流云 2013-08-20
  • 打赏
  • 举报
回复
引用 7 楼 rainbowsix 的回复:
1. Java对象在内存中的形式都是unicode编码么? 和存在硬盘上的有区别么? 内存中就是01,硬盘上一般不存对象吧,存的是class。 2. Java对象序列化后的二进制编码是什么编码呢? 这个可以自己设置么(比如修改成utf-8)? 这个是不可以的,也没什么用, 序列化只是规定个拆分和组装的顺序而已(个人理解) 3. unicode和utf系列编码的关系, 这个可以百度一下。
非常感谢诸位的指点,重新理解了下,应该是这样的: 1. 编码这些应该是针对字符而言的,整形及数值这些是不需要编码的。因此,无论是硬盘中还是内存中,虽然存的都是二进制码,但是字符的编码方式可以是utf9,unicode等等。 2. 序列化只是一种将对象写入字节流的方法而已。可以自己去定义对象的拆分和组装,对象中的字符,写入字节流时,可以选择编码方式,其他的数值型的话,可以直接序列化。
无聊找乐 2013-08-20
  • 打赏
  • 举报
回复
1. Java对象在内存中的形式都是unicode编码么? 和存在硬盘上的有区别么? 内存中就是01,硬盘上一般不存对象吧,存的是class。 2. Java对象序列化后的二进制编码是什么编码呢? 这个可以自己设置么(比如修改成utf-8)? 这个是不可以的,也没什么用, 序列化只是规定个拆分和组装的顺序而已(个人理解) 3. unicode和utf系列编码的关系, 这个可以百度一下。
飞火流云 2013-08-20
  • 打赏
  • 举报
回复
引用 5 楼 forgetsam 的回复:
你到底知道不知道什么叫编码。字节流都是0101了还有个P的编码。 private String abcd = "abcd"才有编码。 如果说0101如何变回"abcd"而不是"????",那是你操作系统和jdk的默认编码。
不好意思,确实不懂,请问在序列化的过程中,比如这个函数: private void writeObject(java.io.ObjectOutputStream oos) throws IOException { oos.writeInt(age); // 请问这里将一个整形写入字节流中,这里不知道用什么编码方式写入字节流? oos.writeUTF(name); //这里是将name字符串以utf的编码写入字节流 System.out.println( " Write Object " ); } 请问上面注释的地方理解的对么?
forgetsam 2013-08-20
  • 打赏
  • 举报
回复
你到底知道不知道什么叫编码。字节流都是0101了还有个P的编码。 private String abcd = "abcd"才有编码。 如果说0101如何变回"abcd"而不是"????",那是你操作系统和jdk的默认编码。
飞火流云 2013-08-20
  • 打赏
  • 举报
回复
比如在上面的代码中: writeObject是将Employ这个对象自身写入字节流的方法 readObject是组装字节流中的被序列化的参数值,e = (Employee)ois.readObject(); 这行就是将读出来的字节流的值强制转换成Employee对象。 以上是一种基于字节流的对象的写入和组装。 但是,在字节流传输的过程中,其编码使用的是什么呢? 是unicode么? 请大神给指点下。
飞火流云 2013-08-20
  • 打赏
  • 举报
回复
引用 2 楼 u011540494 的回复:
你的问题好奇怪。一般unicode编码是指字符的编码。java对象序列化后,该对象能转换成字节流在网络上传输和存储在硬盘上,在网络上的另一端能接收到字节流并把它转换成原来的对象,存在硬盘上的对象能用ObjectInputStream 读取该对象。
我的理解是: 1. 在内存中Java字符串值的存储方式是unicode,硬盘上存字符的话,可以是unicode编码或者utf8或者其他编码方式。 2. 序列化的话,是将对象转换成字节流在网络间或者进程间传输。可是在传输的时候,字节流也是有自己的2进制编码的吧,这里的编码是unicode么? 还是utf8呢/
wind_elf 2013-08-20
  • 打赏
  • 举报
回复
你的问题好奇怪。一般unicode编码是指字符的编码。java对象序列化后,该对象能转换成字节流在网络上传输和存储在硬盘上,在网络上的另一端能接收到字节流并把它转换成原来的对象,存在硬盘上的对象能用ObjectInputStream 读取该对象。
飞火流云 2013-08-20
  • 打赏
  • 举报
回复
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么?

62,616

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧