Esk*_*sko 39 java serialization
我最近一直在努力学习更多,并且通常测试Java的工作和个人项目的序列化,我必须说我越了解它,我就越不喜欢它.这可能是由错误的信息造成的,所以这就是为什么我要问你们这两件事:
1:在字节级别,序列化如何知道如何将序列化值与某些类匹配?
我在这里的一个问题是我用ArrayList进行了一个小测试,其中包含值"one","two","three".在序列化之后,字节数组占用了78个字节,这对于如此少量的信息(19 + 3 + 3 + 4字节)来说似乎非常多.当然,这肯定会有一些开销,但这导致了我的第二个问题:
2:序列化可以被认为是持久化对象的好方法吗?现在很明显,如果我使用一些自制的XML格式,持久性数据将是这样的
<object>
<class="java.util.ArrayList">
<!-- Object array inside Arraylist is called elementData -->
<field name="elementData">
<value>One</value>
<value>Two</value>
<value>Three</value>
</field>
</object>
Run Code Online (Sandbox Code Playgroud)
与XML一般来说,它有点膨胀,占用138个字节(没有空格,即).JSON中也是如此
{
"java.util.ArrayList": {
"elementData": [
"one",
"two",
"three"
]
}
}
Run Code Online (Sandbox Code Playgroud)
这是75字节所以已经比Java的序列化略小.使用这些基于文本的格式,显然必须有一种方法可以将基本数据表示为文本,数字或两者的任意组合.
那么回顾一下,序列化如何在字节/位级别上工作,何时应该使用以及何时不应该使用序列化以及序列化的真正好处除了它是Java的标准之外?
Jon*_*eet 47
我个人试图避免Java的"内置"序列化:
有关实际字节含义的详细信息,请参阅Java对象序列化规范.
有各种替代方案,例如:
(免责声明:我在谷歌工作,而且我正在将C#的端口作为我的20%项目的协议缓冲区,所以显然我认为这是一项很好的技术:)
由于显而易见的原因,跨平台格式几乎总是比平台特定格式更具限制性 - 例如,协议缓冲区具有非常有限的本机类型集 - 但互操作性可能非常有用.您还需要考虑版本控制的影响,具有向后和向前兼容性等.文本格式通常是可手动编辑的,但在空间和时间方面往往效率较低.
基本上,您需要仔细查看您的要求.
序列化的主要优点是它非常易于使用,速度相对较快,并且保留了实际的Java对象网格.
但是你必须意识到它并不是真的意味着用于存储数据,而主要是作为一种方式让不同的JVM实例使用RMI协议通过网络进行通信.
| 归档时间: |
|
| 查看次数: |
21164 次 |
| 最近记录: |