Есть ли способ заставить readExternal() использовать другой конструктор?
Я пытался реализовать readExternal
от Externalizable
интерфейс для более эффективной сериализации моего большого объекта, когда я понял, что нет способа, которым я могу создать новый объект (и использовать его) в этом методе. Дело в том, что мое эффективное представление необходимо расшифровать, и поэтому я не могу назначить свои поля напрямую. Код выглядит следующим образом:
public class BigObject implements Externalizable {
//lots of fields and methods...
@Override
public void writeExternal(ObjectOutput out) throws IOException {
out.writeObject(this.encode()); //encodes to a BigInteger
}
@Override
public void readExternal(ObjectInput in) throws IOException, ClassNotFoundException {
BigInteger code = (BigInteger) in.readObject();
BigObject bo = BigObject.decode(code);
// now I would like this to be "bo"
}
}
На данный момент я копирую все поля из получаемого объекта, но это выглядит ужасно, и я хотел знать, будет ли более приятный путь к чему-то подобному?
1 ответ
Проблема в том, что ваш encode
а также decode
методы не согласованы. decode
это статический метод и encode
не является. Мое предложение будет сделать decode
не статично.