私はAndroidアプリケーション(明らかにJavaで)に取り組んでおり、最近UDPリーダーコードを更新しました。両方のバージョンで、いくつかのバッファーをセットアップし、UDP パケットを受信します。
byte[] buf = new byte[10000];
short[] soundData = new short[1000];
DatagramPacket packet = new DatagramPacket (buf, buf.length);
socket.receive (packet);
最初のバージョンでは、一度に 1 バイトずつデータをまとめました (実際には 16 個の PCM オーディオ データです)。
for (int i = 0; i < count; i++)
soundData[i] = (short) (((buf[k++]&0xff) << 8) + (buf[k++]&0xff));
更新されたバージョンでは、私が始めたときには知らなかったいくつかのクールな Java ツールを使用しました。
bBuffer = ByteBuffer.wrap (buf);
sBuffer = bBuffer.asShortBuffer();
sBuffer.get (soundData, 0, count);
どちらの場合も、「カウント」は正しく設定されています (確認しました)。しかし、オーディオのストリーミングに新たな問題が発生しているようです。おそらく処理速度が十分ではありません。私には意味がありません。明らかに、バッファ コードは JVM コードの 3 つ以上のステートメントにコンパイルされますが、これを開始したとき、2 番目のバージョンは 1 番目よりも高速であるという合理的な仮定のように思えました。
明らかに、私は自分のコードが Java NIO バッファを使用しなければならないと主張しているわけではありませんが、少なくとも一見したところ、これを実行するのは「ベタ」のように思えます。
高速でシンプルな Java UDP リーダーの推奨事項と、一般的に受け入れられている「最善の方法」があるかどうかを誰かが知りましたか??
ありがとう、R.