当前位置: 首页 > 面试题库 >

如何在Java中测试类是否正确实现了Serializable(不仅是Serializable的实例)

谷梁俊楚
2023-03-14
问题内容

我正在实现一个可序列化的类(因此,它是一个使用RMI的值对象)。但是我需要测试一下。有没有一种方法可以轻松做到这一点?

澄清 :我正在实现该类,因此将Serializable保留在类定义中很简单。我需要手动对其进行序列化/反序列化,以查看其是否有效。


问题答案:

简单的方法是检查对象是否为java.io.Serializable或的实例java.io.Externalizable,但这并不能真正证明该对象确实可序列化。

唯一可以确定的方法是实际尝试。最简单的测试是这样的:

new ObjectOutputStream(new ByteArrayOutputStream()).writeObject(myObject);

并检查它是否不会引发异常。

Apache Commons Lang提供了一个更简短的版本:

SerializationUtils.serialize(myObject);

并再次检查异常。

您仍然可以更加严格,并检查它反序列化为与原始序列相同的东西:

Serializable original = ...
Serializable copy = SerializationUtils.clone(original);
assertEquals(original, copy);

等等。



 类似资料:
  • 问题内容: @Entity public class Husband implements Serializable { 广义上是什么? 类为什么实现接口? 为什么丈夫成员一个人只有@OnetoOne(mappedBy =“ Wife”),而妻子成员却没有@OnetoOne(mappedBy =“ husband”) 问题答案: 广义上讲,序列化是Java为开发人员提供的将任何对象的状态持久保存到

  • 使用Fork-Join框架的资源,创建一个同步多线程系统,从三个文本文件中形成一个最大长度的单词集合。不要使用中间集合来读取文本。在本例中,工作由存储在MaxLengthWord类的arr字段中的数组表示。createSubtasks()方法递归地将任务分成更小的工作部分,直到每个工作部分都小于阈值。

  • 问题内容: 在我对Servlet的理解中,该Servlet将由Container实例化,其方法将被调用一次,并且Servlet将像单例一样存活,直到JVM关闭。 我不希望我的servlet被序列化,因为当应用服务器恢复或正常启动时,它将被重新构造。Servlet不应该包含特定于会话的成员,因此将其写入磁盘并重新实例化是没有意义的。有实际用途吗? 我担心的是,我在其中放置了一些不可序列化的字段,然后

  • 问题内容: 我有一个对象。我想确定对象表示的类型是否实现特定的接口。我想知道如何实现? 我有以下代码。基本上,它所做的是获取指定包中所有类的数组。然后,我想遍历数组并将添加实现接口的Class对象添加到我的地图。问题是将一个对象作为参数。我无法实例化接口。所以我对此感到茫然。有任何想法吗? 问题答案: 您应该使用:

  • 我有一个对象。我想确定对象表示的类型是否实现了特定的接口。我想知道这是如何实现的? 我有以下代码。基本上,它所做的是获取指定包中所有类的数组。然后,我想遍历数组并将实现接口的类对象添加到映射中。问题在于将对象作为参数。我无法实例化接口。所以我有点不知所措。有什么想法吗?

  • 在jasper报表中使用不同字体时,需要使用font-extensions。 但是,如果字体呈现不正确,是否有一种方法可以测试pdf是否支持该字体,以便了解问题是与我的字体扩展有关,还是与我的字体有关? 从jasper reports导出到pdf时字体的不正确呈现是一个常见的问题。例如,jasper reports pdf不能导出西里尔值,如清单第1点所示,使用字体扩展并不总是足够的,字体还需要得