我有一个带有自定义 writeObject()和 readObject()方法的可序列化类。 对象序列化时,它需要一个接一个地写两个字节数组。反序列化时,它需要读取这两个数组。
这是我的代码:
private void writeObject (final ObjectOutputStream out) throws IOException {
..
out.writeByte(this.signature.getV()); //one byte
out.writeObject(this.signature.getR()); //an array of bytes
out.writeObject(this.signature.getS()); //an array of bytes
out.close();
}
private void readObject (final ObjectInputStream in) throws IOException, ClassNotFoundException {
..
v = in.readByte();
r = (byte[])in.readObject();
s = (byte[])in.readObject();
this.signature = new Sign.SignatureData(v, r, s); //creating a new object because
//sign.signaturedata
// is not serializable
in.close();
}
在反序列化对象时(readObject方法),它将引发 EOFException ,并且所有三个变量均为 null / undefined 。
关于问题标题,我看到了一个名为 ByteArrayOutputStream 的类,但是要使用它,必须将其封装在ObjectOutputStream中,这是我不能做的,因为我给出了OutputStream并且必须编写
1。。如何使用objectOutputStream正确写入字节数组并使用ObjectInputStream正确读取字节数组?
2。。为什么上面的代码抛出 EOFException 而没有读取任何变量?
编辑:我需要澄清一下: readObject()和 writeObject()由jvm本身调用,同时反序列化和序列化对象。 第二件事是,SignatureData是Sign的子类,它来自第三方库-这就是为什么它不可序列化的原因。
第三件事是,问题可能出在通过ObjectInput / ObjectOutput流读取和写入字节数组,而不是在Sign.SignatureData类中。