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

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

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

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

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

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

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

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

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

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

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

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

  • 相关阅读:
    类的自动载入
    设计模式的概述
    laravel开发微信公众号1 之基本配置
    laravel 中 与前端的一些事5 之解决缓存问题:version
    laravel 中 与前端的一些事4 之合并压缩静态文件
    H3C AR28-31路由器组网实验
    二分查找找一个数所在的范围
    从Code::Blocks到Dev–C++,Dev-C++安装调试一条龙
    Code::Blocks使用与调试一条龙
    JSP相对路径与绝对路径探秘
  • 原文地址:https://www.cnblogs.com/wxdmw/p/14060795.html
Copyright © 2011-2022 走看看