2012-10-18 82 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的方式,你可以在任何类型的对象转换为字符串,反之亦然。

相关问题