JavaSerialize - Kuangcp/Note GitHub Wiki
目录 start
目录 end|2020-04-27 23:42|
码农翻身:序列化: 一个老家伙的咸鱼翻身
对象转化为二进制流
简单的说就是类的版本控制, 标明类序列化时的版本, 版本一致表明这两个类定义一致
在进行反序列化时, JVM会把传来的字节流中的serialVersionUID与本地相应实体(类)的serialVersionUID进行比较,如果相同就认为是一致的,可以进行反序列化,否则就会出现序列化版本不一致的异常。(InvalidCastException)
参考博客
- serialVersionUID有两种显示的生成方式:
- 一个是默认的1L
- 一个是根据类名、接口名、成员方法及属性等来生成一个64位的哈希字段
当你一个类实现了Serializable接口,如果没有定义serialVersionUID,Eclipse会提供这个提示功能告诉你去定义 。 在Eclipse中点击类中warning的图标一下,Eclipse就会自动给定两种生成的方式。 如果不想定义它,在Eclipse的设置中也可以把它关掉的,设置如下: Window ==> Preferences ==> Java ==> Compiler ==> Error/Warnings ==>Potential programming problems 将Serializable class without serialVersionUID的warning改成ignore即可。
因为Java序列化的性能和存储开销都表现不好,而且不能跨语言, 所以一般不使用Java的序列化而是使用以下流行的库
hi.proto
package lm;
message helloworld{
required int32 id = 1;//ID
required string str = 2;//str
optional int32 opt = 3;//optional field
}
- 由 proto 生成 Java 文件
mkdir src && protoc --java_out=./src hi.proto
官网源于Facebook, 支持多种语言: C++ C# Cocoa Erlang Haskell Java Ocami Perl PHP Python Ruby Smalltalk
- 它支持数据(对象)序列化和多种类型的RPC服务, Thrift适用于静态的数据交换, 需要预先确定好他的数据结构, 当数据结构发生变化时,需要重新编辑IDL文件
JBOSS 内部使用的编解码框架