范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文

关于Serializable的一个形象的例子

  一、知识预备
  根据使用Serializable的使用场景,可以发现所涉及的场景都是跨进程的,就是要做的事情不是在一个java进程中完成的,我们都知道java进程是基于jvm跑起来的,而每一个被创建出来的对象都是放在堆里面的,如对象实例中的属性值,但是跨进程时每个Java进程都有一个jvm,也就是各自jvm中都有一个堆用来存放对象信息(很多博客上讲的是对象存放于内存之中,简直云里雾里,新人根本搞不清楚,一定要讲到java的根本jvm)。这时候问题引入,我们如何将A进程的Student实例,传输给本机B进程呢?又或者说如何传输给另外一台机器上的C进程呢? 二、引入序列化
  我们为什么需要序列化呢?或者说什么情况下需要用到序列化呢?或者说如果没有序列化的话,哪些场景是我们处理不了的呢?
  第一种情况是:一般情况下Java对象的声明周期都比Java虚拟机的要短,实际应用中我们希望在JVM停止运行之后能够持久化指定的对象,这时候就需要把对象进行序列化之后保存。
  也就是说,在Java进程启动后,new出来放到内存中的对象(JVM中的堆空间),当JVM停止之后内存空间就被释放掉了,刚才创造的java进程中的世界都消失了,再次启动又会重新创建出来一个新的空间。
  那么如果说是一个单机游戏进程,比如说单机版梦幻西游,人物初始属性中的攻击、防御、魔法都是0,你练了几级之后,这几个属性就会增加,那么今天你玩够了,把游戏进程给关了,那么你刚刚创建的游戏人物的相关信息都要保存下来的(很多游戏里面,在你退出的时候会提示你让你存档,就是这个意思),下次再打开游戏的时候就是将你刚才存档的信息读入到内存,在游戏界面再次的显示出来。 三、过程解析
  Java序列化是指把Java对象保存为二进制字节码的过程,Java反序列化是指把二进制码重新转换成Java对象的过程。
  当然这句话也让人云里雾里,因为对象就是类的实例对象生成之后就是在内存中,这句话应该这样表达,Java序列化是指把位于堆空间的Java对象以二进制字节码的形式保存为文件,反序列化就是将文件中的二进制字节码读取解析到内存中重新转化为Java对象的过程。
  举个例子 package test;  import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable;  public class SerializableTest {      public static void main(String[] args) throws IOException, ClassNotFoundException {         FileOutputStream fos = new FileOutputStream("game-person.info");         ObjectOutputStream oos = new ObjectOutputStream(fos);         GamePerson personIn = new GamePerson();         personIn.setName("abcde");         personIn.setLevel(1);         personIn.setForceValue(2);         personIn.setDefenseValue(3);         oos.writeObject(personIn);         oos.flush();         oos.close();          FileInputStream fis = new FileInputStream("game-person.info");         ObjectInputStream ois = new ObjectInputStream(fis);         GamePerson personOut = (GamePerson) ois.readObject();         System.out.println(personOut.getName());         System.out.println(personOut.getLevel());         System.out.println(personOut.getForceValue());         System.out.println(personOut.getDefenseValue());     } }  class GamePerson implements Serializable {      private static final long serialVersionUID = 1L;      private String name;     private int level;     private int forceValue;     private int defenseValue;      public String getName() {         return name;     }      public void setName(String name) {         this.name = name;     }      public int getLevel() {         return level;     }      public void setLevel(int level) {         this.level = level;     }      public int getForceValue() {         return forceValue;     }      public void setForceValue(int forceValue) {         this.forceValue = forceValue;     }      public int getDefenseValue() {         return defenseValue;     }      public void setDefenseValue(int defenseValue) {         this.defenseValue = defenseValue;     }  }
  运行之后,在workspce目录下会生成game-person.info二进制文件,我们打开看看
  四、修改序列化后的文件
  重点来了,现在人物属性由内存持久化到了本地,那么我们是不是可以做一些手脚?
  嘿嘿,我们把十六进制中各个属性尝试改一下,999(十进制) = 3E7(十六进制),我们改序列化后的文件见下图。
  然后再从文件读取看看看 public class SerializableTest {      public static void main(String[] args) throws IOException, ClassNotFoundException {         FileInputStream fis = new FileInputStream("game-person.info");         ObjectInputStream ois = new ObjectInputStream(fis);         GamePerson personOut = (GamePerson) ois.readObject();         System.out.println(personOut.getName());         System.out.println(personOut.getLevel());         System.out.println(personOut.getForceValue());         System.out.println(personOut.getDefenseValue());     } }
  一刀999,惊不惊喜,意不意外! 五、总结
  除了本地--内存,这种序列化的应用场景外。另外一种也就是第二种情况是:需要把Java对象通过网络进行传输的时候。因为数据只能够以二进制的形式在网络中进行传输,因此当把对象通过网络发送出去之前需要先序列化成二进制数据,在接收端读到二进制数据之后反序列化成Java对象。
  我是  「翎野君」 ,感谢各位朋友的:点赞 、收藏 和评论 ,我们下期见。

强劲实力数据赋能北京冬奥微火炬022年2月4日农历壬寅虎年正月初四,第24届冬季奥运会在中国北京张家口隆重开幕。这届奥运会呈现出太多太多令人赞叹的黑科技无人驾驶的智能高铁,无处不在的云管理系统,智能感知防疫系统地球压电三部曲之一大气电场的产生原因第一章大气电场产生原因的一个假设在介绍地磁场的产生原因之前,我们需要先探求一下大气电场的产生原因,因为,大气电场的产生原因的一个结论或者说是推论,再结合上地球的自2022买手机眼光要放长远,这三款旗舰机,用四五年很轻松旗舰机的价格可能更贵一些,很多小伙伴不舍得买,但是其实贵的手机用的时间也会更长一些。下面这些没有短板的旗舰机使用的寿命更长,体验感更好!小伙伴们可以考虑一下!第一款一加9pro在性更小更便宜的小米12mini新机曝光5。8寸小屏骁龙870小米12系列手机发布以后小米12和小米12Pro这两款手机,因为整体配置的均衡性以及比较不错的用机体验,深受许多消费者的喜爱。不过相对而言小米12x这款手机,因为仅仅采用的是高通骁苹果发布会3月举行,HomePodmini将有更多颜色去年苹果为HomePodmini推出了新的颜色,包括蓝色橙色和黄色,一经推出则获得大卖,在国外,新配色款一度脱销,而常规的黑色和白色款则货量充足。随着苹果三月份发布会到来,外媒预测这是人类最后的科学,也将是人类最大的产业科学家有望通过生物技术征服人类任何重大疾病今天制造行业所谓的,得半导体芯片者得天下,指的是信息半导体芯片。当我们还在为造不出一颗小小的信息芯片而发愁时,信息技术发源地美国的信息硅谷马化腾也很不解为什么你们都放弃了QQ等级?说到QQ,相信大部分的80后90后都是非常熟悉的,因为在微信这个社交软件没有出现之前,QQ是当时国内最大的社交软件,但是如今随着互联网的发展,微信也逐渐的渗透到人们的生活当中,而Q依法规制干扰搜索引擎算法行为近日,针对某人工刷量平台帮助商家虚构点击量,干扰百度搜索引擎算法及妨碍其排序结果的行为,北京市海淀区人民法院经审理,判决该行为违反反不正当竞争法,构成不正当竞争行为。该案系我国首例乐观看待2022年计算机板块业绩前景(附细分龙头股)机构认为,数字经济很可能成为政策持续发力的方向,也有望成为计算机板块的中期主线。一方面,数字新基建是稳定经济的重要手段,也是塑造经济增长新动能的重要基础另一方面,数字技术与各产业的Web3。0这个时代的机遇,年轻人的机遇连续熬了几个夜,在aWSB听了Gary(星瀚资本found)郭宇(Byte28岁退休天才少年)等分享,结合自己的理解整理一下引子不懂Web3。0的不仅仅是你绝大多数人都无法理解,甚人类何以始末新年好!今天想与各位讨论一个猜想人的大脑有没有可能是一部生物天线,用来接受未知领域的能量信号,进而促进生活的改善和发展?现象例如,打腹稿,醒着的时候琢磨一天都写出不来的文章,一觉起
怀念锤子科技小米MIX4发布了,但还有人记着锤子科技吗?应该没有人记得吧,而我却始终记得那个在锤子发布会上讲着李姐万岁的罗老师,还有那一个锤子科技。谁还曾经不是一个讲着下次一定买的锤粉呢?锤子被捧上神坛的阿里,我们是时候该降降温了最近阿里女员工被性侵事件,在全网引发关注,热度持续居高不下,很多人纷纷说,如今的阿里究竟是怎么了?后马云时代,阿里这艘大船又该如何远航?阿里的破冰文化真的是毫无下限和尺度吗?可以说新款比亚迪唐EV续航里程达700公里还有啥里程焦虑?日前,我们从新能源汽车推广应用推荐车型目录(2021年第7批)获悉,新款比亚迪唐EV续航里程大幅提升,其NEDC续航分别达到700公里和615公里,与现款车型最高565公里的NED为什么只有特斯拉能一直降价,其它家都不行?特斯拉又降价了。但是,这次我们并不关心特斯拉又降了多少,因为只要特斯拉的基本理念不变,降价是必然的过程。我们关心的,是特斯拉每一次降价,都是离它的生态闭环,又进了一步。表面上,这是阿里不再是阿里文孟永辉继阿里女员工实名举报上司强制要求出差,并被灌酒,并且被男商户猥亵的事件爆出之后,阿里再一次站在了风口浪尖之上。对于阿里来讲,这个周末或许是最难熬的。或许,比蒋凡事件还要恶劣字节终止招聘阿里涉事男员工选人,要选对人一回顾阿里807事件八月第一个周末,阿里女员工被高管侵犯一事持续发酵,引起社会各界高度关注。直到8月9日凌晨,阿里巴巴董事会主席兼CEO张勇在阿里内网公布了女员工被侵犯的阶段性内部后野蛮增长时代,快手电商的品牌之战任何一个下沉市场渗透率高的平台,都必将面对品牌升级这一关。文姚胤米时娴高洪浩编辑宋玮一代人如何赚钱,又如何花钱,体现了一个时代的特质。这是一个消费选择和消费方式都被数据化了的时代。小米MIX4正式发布,全新陶瓷配色,4999起,满身黑科技就在刚刚,雷总发布了最新的旗舰手机MIX4,最低配4999元起,全新配色影青灰正式亮相。根据雷总展示,最新青色陶瓷非常漂亮,晶莹剔透,带有一丝釉的美感!根据发布会介绍,本次全新MI美妆行业开店如何用大数据科学选址美妆行业开店如何用大数据科学选址大数据(bigdata),IT行业术语,是指无法在一定时间范围内用常规软件工具进行捕捉管理和处理的数据集合,是需要新处理模式才能具有更强的决策力洞察支持光追安兔兔评测Windows版上线四大测试项目等你体验继AndroidiOS,以及Linux版后,安兔兔评测Windows版今天正式上线。与其它版本一样,安兔兔评测Windows版共提供了四大测试项目,分别为CPUGPUMEM和UX。内蒙古最后一个比特币矿工停电每天至少造成数千万损失在内蒙古鄂尔多斯以北100公里处,有一个叫达拉特的小镇。这个名字在地理意义上很常见,但在比特币世界里,它是一个风云密布的地方达拉特曾因收集大型比特币矿藏而闻名于业界。在过去的几年里