2012-10-18 116 views
2

說我有一個字符串:Hello!我必須做的這一切:通過數據報包發送數組的最佳方式是什麼?

  1. 將字符串轉換成字節數組
  2. 發送的字節數組
  3. 將其轉換回一個字符串(供以後使用)

這是我的代碼...

//Sender 
String send = "Hello!"; 
byte[] data = send.getBytes(); 
DatagramPacket packetOut = new DatagramPacket(data, data.length); //send blah blah 

//Receiver 
//blah blah receive it 
String receive = new String(packetIn.getData()); //convert it back 

什麼是快速和優雅w ^唉這樣做的整數數組?

回答

3

對於int [],您可以使用ObjectOutputStream序列化,但更快的方法可能是使用ByteBuffer。

public static byte[] intsToBytes(int[] ints) { 
    ByteBuffer bb = ByteBuffer.allocate(ints.length * 4); 
    IntBuffer ib = bb.asIntBuffer(); 
    for (int i : ints) ib.put(i); 
    return bb.array(); 
} 

public static int[] bytesToInts(byte[] bytes) { 
    int[] ints = new int[bytes.length/4]; 
    ByteBuffer.wrap(bytes).asIntBuffer().get(ints); 
    return ints; 
} 
+0

爲什麼你將整數數組長度乘以4?編輯:因爲每32位int一個字節是8位?只是爲了確保一個浮動將乘以4和長期將是* 8? – user1753100

+1

我假設你想保留32位int的所有4個字節(4 * 8位)。 –

1

我不知道這種方式是如何優雅,但它會很快。使用GSON庫將整數數組轉換爲字符串,並將字符串轉換爲整數數組。

import java.lang.reflect.Type; 
import com.google.gson.Gson; 
... 

Gson gson = new Gson(); 

List<Integer> list = Arrays.asList(1,2,3); 

//Sender 
String send = gson.toJson(list); 
byte[] data = send.getBytes(); 
DatagramPacket packetOut = new DatagramPacket(data, data.length); //send blah blah 

//Receiver 
//blah blah receive it 
String receive = new String(packetIn.getData()); //convert it back 

Type listType = new TypeToken<List<Integer>(){}.getType(); 
List<Integer> list = gson.fromJson(receive, listType); 

GSON性能低,但是。如果你使用的不是那樣java.util.List複雜的對象它證明快速使用 - 將是很好的。

你可以從那裏得到GSON罐子:link: gson 1.7

通過與GSON的方式,你可以在任何類型的對象轉換爲字符串,反之亦然。

相關問題