zoukankan      html  css  js  c++  java
  • java序列化小技巧

    今天偶然之间看到了一个关键字,transient,有点陌生又熟悉,行吧,那就重新学习一下吧。

    找了一篇文章觉得写的很不错,再综合一下我自己学习的体会和理解,于是就有了这一篇半总结半理解的笔记。

    先说一下序列化,它的定义简而言之就是将对象转为字节序列也可以叫字节流。

    而反序列化,就是与之相反的操作。

    如果之前没有接触过序列化的人可能不大理解,记得我第一次接触到这个概念的时候也是云里雾里。

    当时是想将数据存入redis,然而报错了,查了一下错误日志,原因是没有将对象序列化,网上找到的方案是让类实现Serializable接口,那么就会被序列化,尝试了一下果然好用。

    后来了解到这种操作是让JVM来实现序列化和反序列化,只要实现了这个接口(implements这个接口即可),JVM就会代劳处理这两个的操作。

    再后来了解到其实序列化的方式不止一种,这一点是在工作后了解到的,假设有一个int变量,int占32位,四字节,可以将每个字节单独取出来,最终得到一个由四个字节组成的字节序列(字节的顺序决定了字节序列的模式,大端模式、小端模式等等,这个记不大清了)。

    说到这有点扯远了,那么回到我们今天的主角,transient关键字,它的作用就是令某个变量不序列化,但不可用于修饰方法、类或局部变量,静态变量比较特殊,不论是否用这个关键字修饰都不会序列化。

    当某个对象准备在网络上进行传输时,可以用这个关键字修饰某些不想被传输的变量,持久化存储对象时也是同样的。

    顺带一提,序列化可用于破坏单例模式,因为序列化存储对象后,从磁盘恢复的对象并不是通过new关键字创建的。

  • 相关阅读:
    CodeForces gym Nasta Rabbara lct
    bzoj 4025 二分图 lct
    CodeForces 785E Anton and Permutation
    bzoj 3669 魔法森林
    模板汇总——快读 fread
    bzoj2049 Cave 洞穴勘测 lct
    bzoj 2002 弹飞绵羊 lct裸题
    HDU 6394 Tree 分块 || lct
    HDU 6364 Ringland
    nyoj221_Tree_subsequent_traversal
  • 原文地址:https://www.cnblogs.com/wxdmw/p/14060795.html
Copyright © 2011-2022 走看看