2012-03-05 104 views
0

我有很多種消息要發送,用戶可以訂閱其中的一些消息。實現不同消息的訂閱

我打算使用二進制和&設置操作來決定是否發送消息。

例如:

有三個消息:消息的消息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

您可以使用long來處理多達64條消息與此策略。但是,如果您想允許消息組合,例如您的消息類型爲AC(這將使用101類型),則此模式(僅)非常有用。

如果你需要這種模式,並希望標誌更然後32/64消息(消息類型),考慮使用boolean數組:

boolean[] flags = new boolean[MAX_NUMBER_OF_FLAGS]; 

如果你需要存儲訂閱矢量在數據庫中,那麼你可以stringify該字段。定義兩個字符的真假,並存儲:

"-----*-*" 

(如果你有8個信息和用戶訂閱信息1(A)和3(C))。這可以存儲到VARCHAR類型字段。

+0

在第一種方法中,我可以使用列和值4來表示消息A的訂閱。如果使用以下方法,我應該如何設計數據庫表? – Felix 2012-03-05 07:17:06