1。寒冷的冬天这里的工作非常忙碌,一年365天,几乎一天24小时不间断。但我是个闲人,因为我做的工作最近用的人太少了,经常被冷落。很多时候,我只能羡慕地看着线程、反思、注释、收藏、泛型等明星员工在那里忙碌,听着他们热情洋溢的谈笑风生。他们都叫我连载。想想也是。我的工作是将Java对象转换为二进制字节流,反之亦然。这有什么意义呢?当你需要一个Java对象而不用到该对象时,没有必要直接使用new。自然,可怕的垃圾回收会在对象不再使用时对其进行处理。但存在是合理的。在JDk1.1时代,我就已经存在了。那时候人们的思想很超前:网络就是计算机。每个Java对象都应该能够在网络中传播:从一台机器开始,变成二进制字节流,沿着网络穿越千山万水,到达另一台机器,在那里转化为Java对象,操作继续的地方。既然可以二进制方式漫游网络,自然可以将这些字节流保存到硬盘中。当JVM停止,整个世界都崩溃了,线程、反射、注解都不复存在了,而我的字节流也会在硬盘上默默等待,等待下一次JVM重生,恢复对象。所以我觉得我的工作也很有价值。从某种意义上说,我可以让Java对象跨越时空永生!这种永生是有代价的。首先你得用Java,这是废话,因为我只是java对象序列化。虽然二进制字节流的格式是公开的,你可以用任何语言(C、C++、Python……)来解析读取,但是解析之后有什么用呢?那些字节流会告诉你这个是哪个类的数据,字段的类型和值,但是如果你没有相应的Java类,你还是无法构建Java对象。其次,序列化两边的类必须保持一致,否则肯定会出问题。大多数人不知道,在上个世纪末本世纪初,我还是用J2EE火了一阵子。当时J2EE中有个东西叫RMI,其实就是JavaRPC。由于我的出色工作,开发人员可以轻松调用远程服务器上的Java方法,相当于调用本地方法,非常方便。可惜这个RMI只能在Java环境下使用,对于服务器来说根本不是问题,但是那个时候Web应用兴起,浏览器很难有Java环境,所以RMI很快就没落了,然后我就被打入了冷宫,只好蛰伏伺机。2.XML和JSON的挑战后来我们来了一个叫XML的小伙子,他很受大家的欢迎,大家都喜欢把Java对象序列化的工作委托给他。我坐不住了。经过几天的仔细观察,终于发现这家伙有一个很大的缺点:太复杂了!对于我的Java序列化,大多数情况下你只需要让你的类实现Serializable接口,我就可以接手后续的所有工作。别担心。但是用XML,你还是得写一堆代码把一个类中的字段和它们的值变成XML标签/属性/值。当用于表示对象的XML字符串漫游到另一台机器时,必须有一堆代码将XML变成对象。我对着XML笑道:“小伙子,这也太麻烦你了,人的时间太宝贵了,用XML来序列化,代价太大了!”“老家伙,没你想的那么复杂,你可能不知道,我们有一些库可以自动帮助将对象转换成XML,”他毫不犹豫地说。“别忘了,”年轻人补充道,“我们的XML是语言中立的。这里是一个Java对象。对于客户端,任何语言都可以。Java/C/Python/Ruby……没问题,即使在浏览器中Javascript可以处理它,所以你不能处理它?”这家伙戳中了我的痛点,我真的需要Java环境才能在浏览器中运行,唉,真是Java成功Java不好,我说,“我知道你是语言不可知论者,但你有没有注意到您在XML标记中有太多冗余,而实际数据却很少。例如,有一个Person类有两个字段name和address,用你的XML序列化看起来像这样
