Home  >  Q&A  >  body text

javascript - 经常听到序列化和反序列化,请问这个有什么用?

问题可能文的很泛,因为不了解,所以就这么问了,可以从几个方面解答么。

一个是序列化和反序列化一般用于哪里?
另外一个是如何使用?
使用这个的好处是什么?

高洛峰高洛峰2748 days ago1039

reply all(17)I'll reply

  • 高洛峰

    高洛峰2017-04-11 09:03:54

    基本的两个用途,存储和传输,其实都是转储。转储,由一存储介质转移到另一存储介质,最常用的由内存到硬盘,数据或者对象在俩者之间的表示是有区别的,为了能在两者之间还原对象,需要以特定的方式读取和写入数据或者对象。
    序列化和反序列化是相对的,一般是将数据或者对象从内存转储到其他介质是序列化,从其他介质转出到内存是反序列化。

    reply
    0
  • PHP中文网

    PHP中文网2017-04-11 09:03:54

    我就问一个问题,两台电脑,A和B,A现在有一个对象的实例,如何发送给B?

    reply
    0
  • 迷茫

    迷茫2017-04-11 09:03:54

    场景一,mysql5.7以前不支持json,一个字段存多图就要序列化,就是按着一定规则存到数据库。取出就是反序列化啦。

    场景二、载入对象/对象转换 例如查询得到的对象转数组 减少io压力

    reply
    0
  • PHP中文网

    PHP中文网2017-04-11 09:03:54

    对象转字符串存储;字符还原成对象。这里的对象可以是不同语言里不同的数据类型,因为在网络传输中都是字符,没有类型,所以要序列化。序列化其它的应用场景还包括要持久对象存储。

    reply
    0
  • 怪我咯

    怪我咯2017-04-11 09:03:54

    用于哪里:在Android开发时,我一般是序列化对象并传递对象,或者是序列化对象保存本地,等到用的时候再反序列化,供楼主参考。


    如何使用:对象实现Serializable接口,

    通常使用Gson包来序列化或者反序列化,示例:

    String str = gson.toJson(yourObj);
    if (!TextUtils.isEmpty(str)) {
        Type type = (Type) new TypeToken<List<yourObj>>() {
        }.getType();
        List<yourObj> list = new Gson().fromJson(str, type);
    }

    也可以自己代码实现,以List为例,代码如下:

    //将list转为字符串类型数据
    public static String list2String(List<E> list) throws IOException{
    //实例化一个ByteArrayOutputStream对象,用来装载压缩后的字节文件
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    //然后将得到的字符数据装载到ObjectOutputStream
    ObjectOutputStream oos = new ObjectOutputStream(baos);
    //writeObject 方法负责写入特定类的对象的状态,以便相应的readObject可以还原它
    oos.writeObject(list);
    //最后,用Base64.encode将字节文件转换成Base64编码,并以String形式保存
    String listString = new String(Base64.encode(baos.toByteArray(),Base64.DEFAULT));
    //关闭oos
    oos.close();
    return listString;
    }
    //将字符串形式保存的list还原
    public static List<E> string2List(String str) throws StreamCorruptedException,IOException{
    byte[] mByte = Base64.decode(str.getByte(),Base64.DEFAULT);
    ByteArrayInputStream bais = new ByteArrayInputStream();
    ObjectInputStream ois = new ObjectInputStream(bais);
    List<E> stringList =(List<E>) ois.readObject();
    return stringList;
    }

    好处:不知道。大概识别对象不能,序列化后才可以传递数据或存储。

    reply
    0
  • 伊谢尔伦

    伊谢尔伦2017-04-11 09:03:54

    就好比快递打包

    reply
    0
  • 黄舟

    黄舟2017-04-11 09:03:54

    序列化和反序列化,你可以就将其理解为数据的的编码和解码过程,一种语言系统下的数据结构只有这个系统下才能够识别运行;当数据需要跨语言跨系统传输时,必须将其转成一种中间结构,这个中间结构能被双方识别并能够被还原,这就是序列化和反序列~~~
    例如在java中表示的一个数据对象结构和Javascript表示的对象结构是不同的,那么通过将java中的一个数据对象序列化成一个Javascript能够识别结构(JSON格式),javascript就能将其还原成语义相同的数据,在Javascript执行环境下运行~~~
    还有图像数据的传输你也可以认为是一个序列化和反序列化的过程,在传输前图像信息序列化成一个二进制数据流带上图像格式信息,接收方在接收到二进制流后识别出图像格式,将其还原为相应的图像对象显示出来~~~

    reply
    0
  • Cancelreply