Я успешно построил следующий .proto файл:Замена строки в Google протокола буферов данных
package JervisStorage;
option java_package = "TextBase";
option java_outer_classname = "JervisStorage";
message Owner {
optional string name = 1;
optional string sex = 2;
optional string profession = 3;
optional string email = 4;
}
Теперь, мне удалось построить Владелец:
private static Owner owner;
private static FileOutputStream serialOutput;
Owner pusheen= Owner.newBuilder()
.setName("Siema")
.setSex(" ")
.setProfession(" ")
.setEmail(" ")
.build();
Я написал объект файл и успешно прочитать объект из файла:
serialOutput = new FileOutputStream("JervisStorage.ser");
pusheen.writeTo(serialOutput);
serialOutput.close();
owner = Owner.parseFrom(new FileInputStream("JervisStorage.ser"));
System.out.println(owner.getName());
Проблема заключается в том, что я не могу заменить запись с подписью, wr вернемся к файлу и прочитаем весь обновленный объект. Я пытался это сделать:
owner.toBuilder().setName("newName").build();
System.out.println(owner.getName());
serialOutput = new FileOutputStream("JervisStorage.ser");
owner.writeTo(serialOutput);
serialOutput.close();
owner = Owner.parseFrom(new FileInputStream("JervisStorage.ser"));
System.out.println(owner.getName());
К сожалению, этот подход, похоже, не работает ... Может ли кто-нибудь помочь?
Когда вы говорите 'owner.toBuilder()', он создает строитель, но он * не * мутировать существующий объект , Вам нужно назначить результат вызова build(), поскольку это новый экземпляр. Подумайте о неизменных типах. См. Раздел «Строители» на странице https://developers.google.com/protocol-buffers/docs/reference/java-generated. – dyoo