//fix this/ Javaコードの間違いをさがせ!
このシリーズは、あなたのコーディング・スキルを試すコーナーです。毎号オラクルのJavaエバンジェリストたちが、Javaコードに関する難問を出題し、正解と解説を掲載します。是非、毎号チャレンジして貴方のコーディング能力の向上にお役立て下さい。
Articles
Java
Java技術関連記事
Fix This
このシリーズは、あなたのコーディング・スキルを試すコーナーです。毎号オラクルのJavaエバンジェリストたちが、Javaコードに関する難問を出題し、正解と解説を掲載します。是非、毎号チャレンジして貴方のコーディング能力の向上にお役立て下さい。
今回は組み込みに関する問題です。Connected Device Configuration(CDC)とConnected Limited Device Configuration(CLDC)はコネクタ・フレームワークを使用して、最小フットプリントのAPIを介した汎用入力および出力をサポートしています。CDCはOracle Java ME Embedded Clientの基盤であり、CLDCはOracle Java ME Embeddedの基盤です。
すべてのメッセージを1回のgetData()呼出しで読み取るには、どのようにコードを変更すればよいですか。
datagram = connection.newDatagram(256);
while (notDone) {
connection.receive(datagram);
data = datagram.getData();
bytesReceived = datagram.getLength();
// process datagram ...
}
上記のコードについて、正しい修正方法を選んでください。
1) コネクションのタイプがUDPDatagramConnectionであることを確認する
2) connection.newDatagramの呼出しをwhileループの内側に移動する
3) connection.receive()を呼び出す前に、datagram.reset()の呼出しを追加する
4) connection.receive()を呼び出す前に、datagram.setLength(256)の呼出しを追加する
<ヒント>
データ構造がどのように再利用されるかを考えましょう。
正解は 4)です。データグラムの長さを 256 バイトにリセットすることで、最大長のメッセージを保持するための十分な長さを確保します。 データグラムを再利用するため、この方法がもっとも効率的なソリューションであり、リソースに制約がある組込みデバイスに最適です。
1)はデータグラムの長さの処理方法とは関係ないため、不適切です。2)を選ぶと、取得のたびにデータグラムの新規インスタンスが作成されるため問題は解決するでしょう。 しかし、組込みシステムではメモリおよび処理の効率を重視する必要があるため、厳密に言うと、ここでは不正解です。 3 )はデータグラムの読取りポインタをリセットして最初に戻しますが、データグラムの長さには関係ありません。