UDPクライアントサーバーを作成しようとしています。JavaオブジェクトからUDPバイト[]
UINT8 type;
UINT8 flags;
UINT16 len;
UINT32 sequenceN;
UINT16 startIdx;
UINT16 endIdx;
対応するJavaオブジェクトは、次のとおりです:
[受信メッセージはBIG_ENDIANで、構造はこれです:私はすでに、次の操作を実行して、メッセージを読み取ることができています変換するには
short type;
short flags;
int len;
long sequenceN;
int startIdx;
int endIdx;
UDPからJavaへ私は以下を使用します:
typeArray = Arrays.copyOfRange(msg, 0, 1);
type = Util.reassembleShort(typeArray);
flagsArray = Arrays.copyOfRange(msg, 1, 2);
flags = Util.reassembleShort(flagsArray);
lenArray = Arrays.copyOfRange(msg, 2, 4);
len = Util.reassembleInt(lenArray);
seqArray = Arrays.copyOfRange(msg, 4, 8);
sequenceN = Util.reassembleLong(seqArray);
startArray = Arrays.copyOfRange(msg, 8, 10);
startIdx = Util.reassembleInt(startArray);
endArray = Arrays.copyOfRange(msg, 10, 12);
endIdx = Util.reassembleInt(endArray);
バイトを再アセンブルするには私は(上記Util.reassembleへAKAの呼び出し*)以下を使用するJavaオブジェクトへの配列部分:
ショート
ByteBuffer buffer = ByteBuffer.wrap(input);
buffer.order(ByteOrder.BIG_ENDIAN);
short result = ((short) (buffer.get() & 0xff));
ロング
ByteBuffer buffer = ByteBuffer.wrap(input);
buffer.order(ByteOrder.BIG_ENDIAN);
long result = ((long) buffer.getInt() & 0xffffffffL);
のInt
ByteBuffer buffer = ByteBuffer.wrap(input);
buffer.order(ByteOrder.BIG_ENDIAN);
int result = (buffer.getShort() & 0xffff);
文字列
String result = new String(removeStringGarbage(input), Charset.forName("US-ASCII"));
これは素晴らしい動作します。私の質問は、どのように私は逆を行い、オブジェクトを正しいサイズのバイトバッファに入れてUDPで返送するのですか?
"UDPからJavaに変換するには、 " - 代わりにByteBufferを読み出すだけではないのですか?安くて読みやすい。 – chrylis
申し訳ありませんが、 "msg"という変数が入ってくるバイトバッファです。 – Tacitus86
バイトバッファまたはByteBuffer?後者の場合は、 'getShort()'やそれ以外のものを使うことができます。 – chrylis