我正在尝试验证我的自定义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);
}
}
这里有什么问题?
答案 0 :(得分:4)
替换
String written = out.toString();
与
byte[] written = out.toByteArray();
您不能将随机二进制数据存储为String。字符串用于文本。
答案 1 :(得分:2)
您正在尝试将二进制数据解码为文本,然后再编码回二进制文件。总是一个坏主意。
您还应该刷新装饰器输出流。
答案 2 :(得分:0)
没有,只要Foo有一个正确的等于实现。
我不会通过字符串转换传递它,因为这是邪恶的,因为另一个也已经说过了。