我要发送多种消息,用户可以订阅其中一些消息。
我计划使用二进制和&设置操作以决定是否发送消息。
例如:
有三条消息:消息A消息B和消息C
如果有人订阅了所有这些用户,则该用户的二进制数为111。现在将发送消息A(100)并且我将使用该号码(100)& 111.如果我没有得到零,我会把它发送给使用。
public class TestBinary {
static final int USER_DEFINED_NUM = 7; // 111
static final int REQUEST_NUM = 8; //1000
public static void main(String[] args) {
boolean result = (USER_DEFINED_NUM & REQUEST_NUM) != 0;
if(result) {
System.out.println("send");
} else {
System.out.println("not send");
}
}
}
如果有超过32种消息,则此方法将失败,因为int类型只能表示32种消息类型。
你有更好的方法吗?感谢:)答案 0 :(得分:0)
您可以使用long
使用此策略处理多达64封邮件。但是,如果您希望允许消息组合,则此模式(仅)非常有用,例如您具有A
和C
类型的消息(将以101
类型生成)。
如果您需要此模式并希望标记更多信息,而不是32/64条消息(消息类型),请考虑使用boolean
数组:
boolean[] flags = new boolean[MAX_NUMBER_OF_FLAGS];
如果您需要将订阅向量存储在数据库中,则可以 stringify 该字段。为true和false定义两个字符,并存储:
"-----*-*"
(如果您有8条消息,并且用户订阅消息1(A)和3(C))。这可以存储到VARCHAR
类型字段。