2012-03-05 8 views
0

私は多くの種類のメッセージを送信し、ユーザーはそれらのメッセージの一部を購読できます。異なるメッセージのサブスクリプションを実現

私はバイナリと&セット操作を使用して、送信するメッセージを決定する予定です。例えば

3件のメッセージがあります。誰かはそれらの全てを購読している場合、メッセージ、メッセージ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]; 

は、データベース内のサブスクリプションベクトルは、文字列化のフィールドです。真と偽、店舗用の2つの文字を定義します。

"-----*-*" 

(あなたがメッセージ1(A)及び3(C)に8つのメッセージやユーザーが加入している場合)。これはVARCHARタイプのフィールドに格納することができます。

+0

最初の方法では、メッセージAのサブスクリプションを表すために列と値4を使用できます。次の方法を使用する場合は、データベーステーブルをどのように設計する必要がありますか? – Felix

関連する問題