我正在开发一个 Android 应用程序(显然是在 Java 中),我最近更新了我的 UDP 阅读器代码。在这两个版本中,我都设置了一些缓冲区并接收 UDP 数据包:
byte[] buf = new byte[10000];
short[] soundData = new short[1000];
DatagramPacket packet = new DatagramPacket (buf, buf.length);
socket.receive (packet);
在最初的版本中,我一次将数据放回一个字节(实际上是 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 代码语句,但是当我开始这个时,它确实是一个合理的假设,即第二个版本会比第一个更快。
显然,我并没有坚持我的代码必须使用 Java NIO 缓冲区,但至少乍一看,这样做似乎有点像“斗鱼”。
有人对快速、简单的 Java UDP 阅读器有任何建议,是否有普遍接受的“最佳方式”?
谢谢,R。