如何验证对象序列化机制?

时间:2010-10-13 16:47:34

标签: java

我正在尝试验证我的自定义Java对象是否正确序列化/反序列化,并且我可以将此序列化机制与文件,流等一起使用。这是我创建的测试。这是一种正确的方法吗?

public class SerializableTest {
  @Test public void shouldSerialize() throws Exception {
    Foo foo = new Foo(123);

    // serialize it to a string
    ByteArrayOutputStream out = new ByteArrayOutputStream();
    new ObjectOutputStream(out).writeObject(foo);
    String written = out.toString();

    // read it back
    ByteArrayInputStream in = new ByteArrayInputStream(written.getBytes());
    Foo foo2 = (Foo)(new ObjectInputStream(in).readObject());

    // check that two objects are identical
    assertEquals(foo, foo2);
  }
}

这里有什么问题?

3 个答案:

答案 0 :(得分:4)

替换

String written = out.toString();

byte[] written = out.toByteArray();

您不能将随机二进制数据存储为String。字符串用于文本。

答案 1 :(得分:2)

您正在尝试将二进制数据解码为文本,然后再编码回二进制文件。总是一个坏主意。

您还应该刷新装饰器输出流。

答案 2 :(得分:0)

没有,只要Foo有一个正确的等于实现。

我不会通过字符串转换传递它,因为这是邪恶的,因为另一个也已经说过了。