大家都说序列化是将内存中的数据,比如说一个对象转化成2进制序列,这样才能发送到别的主机上,我很纳闷,内存中所有数据不都是以2进制序列形式体现的么?为什么还要专门序列化?

解决方案 »

  1.   

    举个例子,你想让一个表的某个字段能存自定义对象,比如你写了一个user类那么,必须把user序列化,然后存到属性为blob的字段里。我对序列化的理解就是:现在int,String等数据存储和传输数据存储格式已经被固定了,很容易从数据包之中分辨出来,而其他非系统定义数据格式的,需要把它们转化成一类通用的数据格式,就是序列化
      

  2.   

    序列化就是把一个对象变成硬盘上的一串看不懂的字母数字.
    在通过反序列化就可以有升成一个对象.比如说用户登陆后把用户信息放入Cookies,当然Cookies是不能一对象形式存放的.那我们可以把它序列化存放.
    等用户下次登陆的时候,我们可以看用户的Cookies是否有序列化的用户信息,有的话就反系列化它,同时默认登陆.不过序列化消耗资源,据说比反射还慢.
      

  3.   

    运行时环境用来支持用户定义类型的流化的机制。它是将对象实例的状态存储到存储媒体的过程。
    在此过程中,先将对象的公共字段和私有字段以及类的名称(包括类所在的程序集)转换为字节流,
    然后再把字节流写入数据流。在随后对对象进行反序列化时,将创建出与原对象完全相同的副本。例如好像AWT/SWING里面有个JList之类的类 你可以把这个类的对象保存到一个文件里面 然后把它读取出来他还是那个样子 
      

  4.   

    那比如我创建一个自定义User类的实例u1,把u1传到方法Country.addPerson(u1)就不需要将u1序列化才能当参数传递;而把u1保存到文件或者传到主机B上就需要先序列化才能传?我的理解就是在内存中u1的传递是不需要序列化的,一旦出了内存必须序列化。另一个例子就是String S在内存中能直接作为参数传递,一旦出了内存,必须用outputStream()才能传实际上outputStream()就是对系统内建的基础类型的序列化,我的理解对么???
      

  5.   

    我对序列化的另一个理解就是一套规范的数据解析机制,比如你存储字母“a.jpg”在内存中为存储为“10000011”,你自己这道这是a.jpg,但是一旦你传给别人,别人拿着“10000011”根本不知道是什么,使数字“83”还是字母“S”还是什么别的东西,他不认识,所以必须序列化,比如把10000011系列化成 “1010 0101 10101100”这样对方收到之后一看“1010”知道是个图片,因为“1010”解析成图片,看到“0101”知道是JPG格式的,后面的是内容什么的。这只是个例子,不知道是不是对
      

  6.   

    要把一个对象序列化,这个对象所在的类需要实现Serializable,而这个接口中并没有方法。对象序列化是为了在传递对象时把对象转化为另一种形式的数据,之后通过反序列化把此数据恢复为原来的对象。
      

  7.   

    dracularking :“序列化就是将一个对象的状态(各个属性量)保存起来,然后在适当的时候再获得。 
    序列化分为两大部分:序列化和反序列化。序列化是这个过程的第一部分,将数据分解成字节流,以便存储在文件中或在网络上传输。反序列化就是打开字节流并重构对象。对象序列化不仅要将基本数据类型转换成字节表示,有时还要恢复数据。恢复数据要求有恢复数据的对象实例 ”
    其实我还不是特别明白“将数据分解成字节流”不分解就不是字节流了么?在硬盘和内存中存储不都是字节形式么?