2011-11-23 58 views
0

一個簡單的問題:如何代表字節緩衝區的目的地列表

我有一個目標列表,例如,A,B,C,d,E,......我需要把這個destiantion名單到一個字節緩衝區並使用java套接字發送到客戶端。在客戶端,它將解析字節緩衝區並獲取目的地列表。

我找到兩種方法來做到這一點:首先,使用dest_list_size + dest_list的格式。那麼上面的例子將變成:5 + A; B; C; D; E;其次,使用哈希集來保存目的地列表。那麼如何將哈希集轉換爲字節數組並轉換爲哈希集?

我想驗證哪種方式更好?謝謝。

+0

您是否使用二進制協議?如果是這樣,我會研究Java的內置序列化。如果沒有,也許調查HTTP + JSON。 – Charlie

+0

**永遠不會**用戶Java的內置序列化,它不保證在版本或實現之間保持不變,而是不兼容的雷區。 –

回答

0

取決於您的目標字段的類型。

ByteBuffer bb = ... 
Set<Character> destinations = new LinkedHashSet<Character>(
     Arrays.asList('A', 'B', 'C', 'D', 'E')); 
bb.put((byte) destinations.size()); 
for (char b : destinations) bb.put((byte) b); 

bb.flip(); 

int size = bb.get(); 
Set<Character> destinations2 = new LinkedHashSet<Character>(); 
for (int i = 0; i < size; i++) 
    destinations2.add((char) bb.get()); 
System.out.println(destinations2); 

打印

[A, B, C, D, E] 

如果您有不同類型的目的地或超過127個目的地可能你需要改變你如何寫的字段/值的要求。

+0

它的工作原理和非常感謝。 – susan

1

最好的方法是將其序列化爲更像json的標準。您可以使用現有的庫,即jackson