Java 实现序列化时需要确保的关键点是什么
在java中实现良好的序列化时,检查清单中的关键点是什么(我不是真的在寻找,实现Serializable、write、readObject等) 相反,如何减小对象的大小,可能是如何使对象采用zip格式并通过网络发送等。。 如何确保安全的传输模式。Java 实现序列化时需要确保的关键点是什么,java,serialization,Java,Serialization,在java中实现良好的序列化时,检查清单中的关键点是什么(我不是真的在寻找,实现Serializable、write、readObject等) 相反,如何减小对象的大小,可能是如何使对象采用zip格式并通过网络发送等。。 如何确保安全的传输模式。 其他类似的..如何减小对象的大小:new ObjectOutputStream(new GziOutputStream(new BufferedOutputStream(out))。但这是一种空间-时间权衡。您可能会发现,增加延迟会使性能变差 如何确保
其他类似的..如何减小对象的大小:new ObjectOutputStream(new GziOutputStream(new BufferedOutputStream(out))。但这是一种空间-时间权衡。您可能会发现,增加延迟会使性能变差 如何确保传输的安全模式:SSLSocket或HTTPS URL 还有像这样的吗 其他人喜欢什么?你需要具体点。
- 不要使用序列化来“持久化”对象-这使得模式管理(即更改构成类状态的内容)几乎不可行
- 始终声明一个
字段;否则您将无法添加方法或以任何方式更改类(即使是非状态更改的类),而旧版本的代码无法反序列化对象(将抛出一个serialVersionUID
)不兼容的ClassVersionError
- 如果要反序列化类的逻辑“枚举”实例(类型安全枚举模式),请尝试并重写
readResolve
- 确保您对构成类状态的变量的名称100%满意。一旦序列化了实例,就不能更改变量名称
- 不要实现可序列化的
- 不要使接口可序列化——实现类可以是,但接口不应是
- 不要将序列化作为库传递对象的方式的一部分,除非您是对象的唯一生产者和消费者(例如服务器GUI通信)。请改用二进制/有线协议(例如)
- 为了最大限度地减少通过线路发送的内容,可以使用swizzling。也就是说,您可能有一个
类;序列化的表单可能只是一个唯一的产品
int
字段。然后可以根据需要使用所有其他方法来构造相关状态(可能是作为数据库调用,或者调用某些中央服务)id
- 如果要序列化包含某些元素集合作为其状态一部分的对象,请确保对该集合进行
。否则,您可能会发现有人在序列化时修改该集合,从而导致同步
ConcurrentModificationException
如何减小对象的大小 分析您的数据并剥离对象,以便您在其中只包含必要的数据。这是非常特定于上下文的,因为最佳优化可以在域中进行。例如,您可以检查是否可以只发送更改的增量
这是一个有趣的问题,但你必须更具体地说明你的目标或领域,才能得到最合适的答案。你具体想做什么?针对不同的情况有不同的策略。阅读有效的Java-有一整章关于序列化。看看RMI、Hessian、Burlap……还有对远程处理的支持例如,在Spring框架中。不要重新发明轮子。引用如下:“阅读有效的Java-有一整章都是关于序列化的。”——@Bozho。我完全同意这一点。