java - 替换 Google 协议(protocol)数据缓冲区中的字符串

标签 java google-app-engine serialization protocol-buffers

我已成功构建以下 .proto 文件:

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());

问题是我无法替换单条记录,将其写回文件并读取整个更新的对象。我一直在尝试这样做:

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());

不幸的是,这种方法似乎不起作用......有人可以帮忙吗?

最佳答案

为什么不这样做

  editedOwner = Owner.newBuilder()
                          .mergeFrom(new FileInputStream("JervisStorage.ser")) 
                          .setName("new name") 
                          .build();

或者你也可以这样做

  editedOwner = owner.toBuilder()
                     .setName("new name") 
                     .build();

关于java - 替换 Google 协议(protocol)数据缓冲区中的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35530853/

相关文章:

java - Android:KeyEvent.KEYCODE_X 显示为 '8'

java - 将 Android 启动器快捷方式添加到主屏幕

ruby-on-rails - Django、Ruby on Rails、Google App Engine 等之间有什么区别?

java - GSON反序列化忽略列表中的空对象

java - 如何访问JWT Token然后处理请求?

java - Spring 中对版本化实体的 ETag 支持

google-app-engine - 具有任何过期时间的 Memcache 项目在 Google App Engine 上使用 Go 立即过期

java - 如何在 App Engine 中安排 cron 作业?

c# - 序列化中的 System.OverflowException

multithreading - 使用MSBuild并行构建的问题