我如何 serialize/deserialize 一个 Proto 对象到 Android 项目中的本地存储?

How can I serialize/deserialize a Proto object to a local storage in Android project?

如何将 Proto 数据保存到文件中? 如果我的原型数据看起来像这样,我可以将其保存在文件中还是需要在我的原型文件中进行一些更改?

message GameHistory {
    repeated Game game = 1;
}

message Game {
    string title = 1;
    oneof entity {
        Easy easy = 2;
        Hard hard = 3;
    }
}

message Easy {
}

message Hard {
    Bool isPaid =1;
    int32 number_of_levels = 2;
}

这是我在 Java 代码中的游戏列表:

GameResponse.Game game1 = GameResponse.Game.newBuilder().setTitle("Asd").setEasy(GameResponse.Easy.getDefaultInstance()).build();
GameResponse.Game game2 = GameResponse.Game.newBuilder().setTitle("Bsd").setHard(GameResponse.Hard.getDefaultInstance()).build();
final GameResponse.GameHistory build = GameResponse.GameHistory.newBuilder().addGame(game1).addGame(game2).build();

使用 com.google.protobuf GameResponse.GameHistory class 包含以下两种方法:

  • void writeTo(final OutputStream output)
  • static GameResponse.GameHistory parseFrom(InputStream input)

因此,您将能够使用这两种方法来 write/read 协议消息 to/from 文件。

// to write:
File file = new File(context.getExternalFilesDir(null), "fileName.bin");
OutputStream fos = FileOutputStream(file);
gameHistory.writeTo(fos);
fos.flush();
fos.close();

// to read:
File file = new File(context.getExternalFilesDir(null), "fileName.bin");
InputStream fis = FileInputStream(file);
GameResponse.GameHistory gameHistory = GameResponse.GameHistory.parseFrom(fis);
fis.close();