在java中实现良好的序列化时要检查的核对表有哪些关键点(我不是真的在寻找,实现Serializable,write,readObject等)。
相反,如何减小对象的大小,可能如何以zip格式制作对象并通过网络发送等。 如何确保安全的转移方式。 像这样的任何其他人..答案 0 :(得分:0)
如何减小对象的大小:new ObjectOutputStream(new GZipOutputStream(new BufferedOutputStream(out))。但这是一个时空权衡。你可能会发现它通过增加延迟使性能变差。
如何确保安全的传输模式:SSLSocket或HTTPS URL。
像这样的任何其他人
还有其他人喜欢什么?你需要具体。
答案 1 :(得分:0)
不使用序列化来“持久化”对象 - 这使得模式管理(即更改构成类的状态)几乎不可行
始终声明serialVersionUID
字段;否则你将无法以任何方式添加方法或更改类(甚至是非状态更改的类),而旧版本的代码无法反序列化对象(将抛出IncompatibleClassVersionError
)< / p>
如果要反序列化类的逻辑“枚举”实例(typesafe枚举模式),请尝试覆盖readResolve
确保您对构成班级状态的变量名称100%满意。一旦序列化了实例,就无法更改变量名称
除非您真的需要
Serializable
不要创建接口Serializable
- 实现类可能是,但接口不应该是
不要将序列化作为库传递对象的方式的一部分,除非您是对象的唯一生产者和使用者(例如服务器GUI通信)。改为使用二进制/有线协议(例如 protobuf )
为了最大限度地减少通过电线发送的内容,您可以使用调配。也就是说,也许你有一个Product
类;序列化表单可能只是一个唯一的int
id
字段。然后可以根据需要建立所有其他方法来构建相关状态(可能作为数据库调用,或调用某些中央服务)
如果要序列化包含某些集合元素作为其状态一部分的对象,请确保在集合中synchronize
。否则,您可能会发现有人在序列化时修改了集合,从而产生ConcurrentModificationException
答案 2 :(得分:0)
可能如何以zip格式制作对象并通过网络发送等。
了解网络游戏的游戏开发者如何实施网络。他们知道如何快速传输数据。看看例如http://code.google.com/p/kryonet/
如何确保安全的转移模式。像这样的任何其他人..
安全模式有很多解释。如果需要可靠性,请使用TCP,否则使用UDP。如果你需要加密使用TLS,否则rot13可能适合。如果需要确保完整性,请将值的哈希值附加到消息中。
如何减小对象的大小,
分析您的数据并删除对象,以便您只拥有必要的数据。这是特定于上下文的,因为最佳优化可以在域中。例如。您可以检查,是否可以仅发送更改的增量。
这是一个有趣的问题,但您必须更加具体地了解您的目标或领域,以获得最适合的答案。