实现不同消息的订阅

时间:2012-03-05 06:57:43

标签: java

我要发送多种消息,用户可以订阅其中一些消息。

我计划使用二进制和&设置操作以决定是否发送消息。

例如:

有三条消息:消息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种消息类型。

你有更好的方法吗?感谢:)

1 个答案:

答案 0 :(得分:0)

您可以使用long使用此策略处理多达64封邮件。但是,如果您希望允许消息组合,则此模式(仅)非常有用,例如您具有AC类型的消息(将以101类型生成)。

如果您需要此模式并希望标记更多信息,而不是32/64条消息(消息类型),请考虑使用boolean数组:

boolean[] flags = new boolean[MAX_NUMBER_OF_FLAGS];

如果您需要将订阅向量存储在数据库中,则可以 stringify 该字段。为true和false定义两个字符,并存储:

 "-----*-*"

(如果您有8条消息,并且用户订阅消息1(A)和3(C))。这可以存储到VARCHAR类型字段。