0

完全にプラットフォームに依存しない TCP ストリームを受け入れる Java サーバーを構築して、クライアントを C++、PHP、ActionScript などの他の言語で記述できるようにしたいと考えています。

ただし、int、short などのさまざまなプリミティブをストリームに書き込みたい場合は、正しい整数の長さと、整数が符号付きか符号なしかを考慮する必要があります。これは問題です。整数のバイト長はプラットフォームによって大きく異なるためです。たとえば、PHP の整数は 32 ビット マシンと 64 ビット マシンではサイズが異なります。

このため、整数値ではなくテキストのみを送信することが合理的である可能性があります。これは、テキストが同じ文字セットとバイト順を使用している場合、すべてのマシンが同じ方法でテキストを解釈するためです。したがって、サーバーは、プラットフォームに依存しないデータを読み取る必要がある場合にのみ DataInputStream.readUTF() を使用できます。

私の主張が正しいかどうかはわかりませんが、間違っている場合は訂正してください。

4

2 に答える 2

1

テキストを送信することはできますが、writeUTF/readUTF は特定の形式であるため、使用しないでください。つまり、符号なしのshort長さの後に UTF 文字が続きます。

テキストを使用できる理由は、一度に各バイトを解析する必要があるためです。バイナリでもまったく同じことができます (通常ははるかに高速です)。

最大の違いは、テキストの方が読みやすく、デバッグしやすいことです。この理由だけでも、最初のプロトコルをテキストベースにすることをお勧めします。プロトコル エラーをデバッグできる自信がある場合にのみ、バイナリ プロトコルを使用することをお勧めします。

于 2013-06-11T11:20:46.473 に答える
1

DataInputStream.readUTF() でさえ、普遍的な機能ではありません。かなり複雑なエンコーディングを使用します。

ThriftProtocol Buffersなど、最も一般的な言語のクライアント ライブラリが既にあるデータ形式を見つけます。

于 2013-06-11T11:26:19.877 に答える