有人认为使用Java的默认序列化方法将数据库中的对象存储在blob列中是个好主意。这些对象的结构由另一个组控制,他们将字段类型从BigDecimal更改为Long,但我们数据库中的数据保持不变。现在我们无法读回对象,因为它会导致ClassCastExceptions。我试图通过编写自己的readObject方法来覆盖它,但这会抛出StreamCorruptedException,因为默认的writeObject方法写入了什么。如何使我的readObject调用表现得像Java的默认调用?我可以跳过一定数量的字节来获取我的数据吗? 最佳答案
我正在处理一个Java的native序列化速度很慢的项目,因此我们希望转向在类上实现Externalize接口(interface)以获得卓越的性能。但是,这些类有很多数据成员,我们已经意识到在编写这两个方法时很容易出错。我们只是在这些函数中读/写类的所有成员,没什么特别的。是否有某种方法可以生成readExternal()writeExternal()block以在离线过程中或在编译时自动外部化?我看过http://projectlombok.org/,这样的东西本来就是理想的。同样,我们希望保持这些类不可变,但不可变类无法实现可外部化接口(interface)-我们希望使用有效ja
如果我们正在实现Serializable,则不需要它。那么为什么会有这种差异呢?它与序列化的实际机制有何关系? 最佳答案 可以在http://www.jusfortechies.com/java/core-java/externalization.php上找到详尽的解释(尽管文章的语法可能会有所改进).简短的回答,以备将来引用,以防链接页面消失:Externalizable是扩展Serializable的接口(interface)。然而,与Serializable不同的是,仅通过读取序列化的字节流并不能恢复对象,而是调用公共(pub
我是Redis的新手。我有一些Externalizable对象。但是SpringDataRedis不使用这些对象。SpringDataRedis是否需要严格Serializable还是有一些方法可以使用Externalizable? 最佳答案 SpringDataRedis支持不同serialization以二进制形式表示对象的策略,以便它可以存储在Redis中。其中一种序列化格式正在使用Java'sserialization机制通过ObjectOutputStream.使用Java序列化时没有SpringData细节。
既然我们可以通过覆盖writeObject()和readObject()来覆盖默认的序列化过程,那么Externalizable接口(interface)需要什么? 最佳答案 实现Serializable的类可能或可能不希望更改该类的实例写入流的格式。但是,实现Externalizable的类必须实现writeExternal和readExternal方法,以及类的负责向/从流中写入和恢复数据。 关于java-当我们可以在java中覆盖writeObject和readObject时,为什
Serializable和有什么区别?和Externalizable在Java中? 最佳答案 要补充其他答案,通过实现java.io.Serializable,您可以获得类对象的“自动”序列化功能。无需实现任何其他逻辑,它会正常工作。Java运行时将使用反射来确定如何编码和解码您的对象。在早期版本的Java中,反射非常慢,因此序列化大型对象图(例如在客户端-服务器RMI应用程序中)有点性能问题。为了处理这种情况,提供了java.io.Externalizable接口(interface),它类似于java.io.Serializab
Serializable和有什么区别?和Externalizable在Java中? 最佳答案 要补充其他答案,通过实现java.io.Serializable,您可以获得类对象的“自动”序列化功能。无需实现任何其他逻辑,它会正常工作。Java运行时将使用反射来确定如何编码和解码您的对象。在早期版本的Java中,反射非常慢,因此序列化大型对象图(例如在客户端-服务器RMI应用程序中)有点性能问题。为了处理这种情况,提供了java.io.Externalizable接口(interface),它类似于java.io.Serializab