通过数据报包发送数组的最佳方法是什么?

时间:2012-10-18 12:16:19

标签: java bytearray datagram

说我有一个字符串:Hello!我必须做所有这些:

  1. 将字符串转换为字节数组
  2. 发送字节数组
  3. 将其转换回字符串(供以后使用)
  4. 这是我的代码......

    //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
    

    对于一组整数,这是一种快速而优雅的方法吗?

2 个答案:

答案 0 :(得分: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;
}

答案 1 :(得分:1)

我不知道这种方式如何优雅,但会很快。使用GSON库将Integers数组转换为String,并将String转换为Integer数组。

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 jar:link: gson 1.7

顺便使用GSON,您可以将任何类型的Object转换为String,反之亦然。