【发布时间】:2013-10-30 23:07:15
【问题描述】:
在我的 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 之间。
我想以最有效的编码方式对不同的选项进行编码。
【问题讨论】:
标签: java android serialization bit-manipulation bitmask