Java пишет байтовый массив с заданным ObjectOutputStream - PullRequest
0 голосов
/ 05 октября 2018

У меня есть сериализуемый класс с пользовательскими 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 без чтения даже одной переменной?

EDIT: Мне нужно уточнить: readObject () и writeObject () вызываются самим jvm при десериализации и сериализации объекта.Во-вторых, SignatureData является подклассом для Sign, который поступает из сторонней библиотеки - и поэтому он не сериализуем.

Третье, проблема, вероятно, заключается в байте чтения и записимассивы потоками ObjectInput / ObjectOutput, а не в классе Sign.SignatureData.

...