2

String があった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

整数の配列に対してこれを行うための迅速でエレガントな方法は何ですか?

4

2 に答える 2

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;
}
于 2012-10-18T12:19:09.203 に答える
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 jar を取得できます:リンク: gson 1.7

ところで、GSON を使用すると、任意のタイプのオブジェクトを文字列に、またはその逆に変換できます。

于 2012-10-18T12:36:07.497 に答える