Java用给定的ObjectOutputStream写一个字节数组

时间:2018-10-05 17:43:47

标签: java arrays serialization deserialization eofexception

我有一个带有自定义 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类中。

0 个答案:

没有答案