将字节数组从ResultSet转换为Object时StreamCorruptedException

时间:2014-06-26 11:57:59

标签: java serialization objectinputstream objectoutputstream

我正在尝试读取我从MySQL ResultSet获取的字节数组,并使用ObjectInputStream将其转换为Object。 在readObject()期间,抛出以下异常: Java.io.StreamCorruptedException: invalid type code: 20

错误并不总是发生,但是当它发生时,它将一直存在,直到我删除并重做数据库中的此条目。它也总是相同的对象 这可能是因为将对象编写为Blob时出现了一些错误吗?或者数据本身有问题吗?

这是我正在使用的代码:

byte[] bytes = resultSet.getBytes(index);
if (bytes != null && bytes.length > 0) {
  InputStream byteInput = new ByteArrayInputStream(bytes);
  ObjectInputStream objectInput = new ObjectInputStream(byteInput);
  Object resultObject = objectInput.readObject();
  objectInput.close();
  return resultObject;
}

修改
错误似乎是在写对象时,正如 laune 所建议的那样。但我仍然不知道ObjectOutputStream如何写出损坏的数据 我知道close()缺失了,但如果我是正确的,flush()应该是同样的事情。至少这不应该导致损坏的字节数组 此外,没有其他线程可以在写入时更改对象,并且仅为此一个操作创建输出流,并且永远不会重复使用。

序列化的代码(值为org.w3c.dom.Document):

  try {
    ByteArrayOutputStream byteStream = new ByteArrayOutputStream();
    ObjectOutputStream objectStream = new ObjectOutputStream(byteStream);
    objectStream.writeObject(value);
    objectStream.flush();
    statement.setBytes(index, byteStream.toByteArray());
  } catch (Exception e) {
    throw new PropertyAccessException("Cannot serialize object", e);
  }

0 个答案:

没有答案