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

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

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

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

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

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

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

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

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

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

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

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

  • 相关阅读:
    用find和xargs处理文件名中带空格的文件
    python调用Shell
    python 的sys.argv 和 sys.path.append() 用法和PYTHONPATH环境变量
    pytorch中 model.cuda的作用
    Python中变量和对象的关系
    python中的import、from import以及import as的区别
    常用功能bash脚本
    图像数据增强-图像补边
    python中的glob库函数
    喵哈哈村的七十六
  • 原文地址:https://www.cnblogs.com/wxdmw/p/14060795.html
Copyright © 2011-2022 走看看