1

Java を使用した TCP および UDP ソケット プログラミングについて学習しています。ネットワーク クラスで読んでいる本の 1 つに、次の行があります。

DatagramPacket receivedPacket = new DatagramPacket(receiveData, receiveData.length);

String modifiedSentence = new String(receivedPacket.getData());

receivedPacked は単なる DatagramPacket タイプの Object であり、 modifiedSentence はサーバーから返されたものを格納します。この場合、ReceivedPacket.getData() はパケットを格納する前にバイトから文字列に変換します。

私の質問は、次を使用するのではなく、文字列のオブジェクトを作成し、変換されたパケットをそれに保存/渡す理由です。

String modifiedSentence = receivedPacket.getData();

これはうまくいきませんか?Java では、String クラスのオブジェクトを具体的に作成するのは現実的ではないと考えました。

4

2 に答える 2

2

DatagramPacket.getData()文字列ではなくバイト配列を返します。したがって、文字列に割り当てるには、文字列に変換する必要があります。

于 2013-02-19T22:12:52.290 に答える
0

文字列modifiedSentence=new String(receivedPacket.getData())

とにかくそれは間違っています。そのはず

String modifiedSentence = new String(receivedPacket.getData(), 0, receivedPacket.getLength())

私の質問は、以下を使用するのではなく、なぜ文字列のオブジェクトを作成し、変換されたパケットをそのオブジェクトに格納/渡すのかということです。

文字列modifiedSentence=receivePacket.getData();

コンパイルされないからです。ではなく、をgetData()返します。byte[]String

Javaでは、Stringクラスのオブジェクトを具体的に作成することは実用的ではないと思いました。

引数がすでにAである場合のみ、String.この場合はそうではありません。

于 2013-02-19T22:39:44.203 に答える