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