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

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

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

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

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

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

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

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

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

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

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

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

  • 相关阅读:
    设置sqlplus输出格式
    Using CrunchBase API
    Docker ( Is docker really better than VM ?)
    Cross platform GUI for creating SSL certs with OpenSSL
    PHP, Python Nginx works together!
    Your personal Mail Server iRedMail on ubuntu14.04 x64
    iphone/ipad/iOS on Linux Debian7/ubuntu12.04/linuxmint13/ubuntu14.04 compiling from source
    Internet Liberity -- a specific anonymous internet guide
    Organic Solar Cells
    Organic Solar Cells
  • 原文地址:https://www.cnblogs.com/wxdmw/p/14060795.html
Copyright © 2011-2022 走看看