0

私はJavaを初めて使用し、UDP/TCPを介して独自のネットワークプロトコルを使用してプログラムを作成しています。Cにはそのようなパケットがあります:

struct test_package {
    u32 cmd;
    u32 args;
    u32 flags;
};

UDPを例にとると、DatagramPacketから取得するのはbytedata[]です。どうすればパッケージ構造体に変換できますか?

Cの場合は、(struct test_package *)data配置の制限がない場合に限ります。

ありがとう

4

2 に答える 2

1

クラスがあるとしましょう:

public class TestPackage implements Serializable
{
   long cmd;
   long args;
   long flags;
}

シリアル化することで、これをbyte[]としてDatagramPacketに保存できます。次に、もう一方の端で、byte []を取得し、TestPackageの正確なインスタンスに逆シリアル化することができます。

(シリアル化/逆シリアル化は次のようになります)

public static byte[] serialize(Object object) {
   ByteArrayOutputStream out = new ByteArrayOutputStream();
   ObjectOutputStream oos = new ObjectOutputStream(out);
   oos.writeObject(object);
   return out.toByteArray();
}

public static Object deserialize(byte[] datagramData) {
   ByteArrayInputStream in = new ByteArrayInputStream(datagramData);
   ObjectInputStream ois = new ObjectInputStream(in);
   return ois.readObject();
}
于 2012-07-25T02:55:49.660 に答える
0

Javaはダイレクトメモリアクセスを提供しないため、Cのように構造体にキャストすることはできません。たとえば、バイト配列を自分で解析する必要があります。

byte data[] = ...;
DataInput input = new DataInputStream(new ByteArrayInputStream(data));

int cmd = input.readInt();
int args = input.readInt();
int flags = input.readInt();
于 2012-07-25T02:55:41.943 に答える