在我的 Android 应用程序中,我有一个只包含数据的类(用 getter 公开)。此类需要序列化并发送给其他客户端(通过迭代所有 getter 并将它们存储在 ByteBuffer 中天真地完成)。
public class Data
{
public int getOption1() { }
public int getOption2 { }
// ...
public int getOptionN { }
}
连载:
public void serialize(Data data) {
// write getOption1();
// write getOption2();
// ...
}
反序列化:
public void deserialize() {
// read Option1();
// read Option2();
// ...
}
我希望能够定义实际发送哪些字段(而不是盲目地发送所有字段),对此的一个潜在解决方案是定义另一个字段,bitmask
该字段定义实际发送哪些字段。
接收方解析位掩码,并可以从接收到的消息中判断哪些字段应该反序列化。
问题是 - 使用 int(32 位)作为位掩码只允许 32 个唯一选项(通过使用 2 个枚举值的“标准”幂)。
如何定义一个可以支持更多项目的位掩码?是否有任何其他编码(除了将每个值存储为 2 的幂)?
实际值的数量可能会有所不同(取决于用户输入),并且可能在 50 到 200 之间。
我想以最有效的编码对不同的选项进行编码。