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

yeg*_*256 1 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);
  }
}
Run Code Online (Sandbox Code Playgroud)

这里有什么问题吗?

Nik*_*bak 5

代替

String written = out.toString();
Run Code Online (Sandbox Code Playgroud)

byte[] written = out.toByteArray();
Run Code Online (Sandbox Code Playgroud)

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

  • @Vincenzo您可能会将“byte”与“char”混淆(字符串本质上是“char[]”)。要将字节数组(8 位数字)转换为字符串,必须使用某种编码。如果编码无法处理您的输入(例如,该数字没有字符),则输出未指定。 (2认同)