如何在Android项目中将Proto对象序列化/反序列化到本地存储



如何在文件中保存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.protobufGameResponse.GameHistory类包含以下两种方法:

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

因此,您将能够使用这两种方法在文件中写入/读取协议消息。

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

最新更新