Tôi đang làm việc trên một ứng dụng Android (trong Java, rõ ràng) và gần đây tôi đã cập nhật mã trình đọc UDP của mình. Trong cả hai phiên bản, tôi thiết lập một số bộ đệm và nhận được một gói tin UDP:Các lớp Java ByteBuffer/IntBuffer/ShortBuffer có nhanh không?
byte[] buf = new byte[10000];
short[] soundData = new short[1000];
DatagramPacket packet = new DatagramPacket (buf, buf.length);
socket.receive (packet);
Trong phiên bản ban đầu, tôi đặt các dữ liệu lại với nhau một byte tại một thời điểm (nó thực sự là 16 PCM dữ liệu âm thanh):
for (int i = 0; i < count; i++)
soundData[i] = (short) (((buf[k++]&0xff) << 8) + (buf[k++]&0xff));
Trong phiên bản cập nhật, tôi đã sử dụng một số công cụ Java mát tôi không biết về khi tôi bắt đầu:
bBuffer = ByteBuffer.wrap (buf);
sBuffer = bBuffer.asShortBuffer();
sBuffer.get (soundData, 0, count);
Trong cả hai trường hợp, "đếm" đang được dân cư một cách chính xác (tôi đã kiểm tra). Tuy nhiên, dường như có vấn đề mới với âm thanh phát trực tuyến của tôi - có lẽ nó không được xử lý đủ nhanh - điều này không có ý nghĩa gì với tôi. Rõ ràng, mã đệm được biên dịch thành nhiều hơn ba câu lệnh của mã JVM, nhưng nó chắc chắn có vẻ giống như một giả định hợp lý khi tôi bắt đầu điều này rằng phiên bản thứ 2 sẽ nhanh hơn phiên bản thứ nhất.
Bằng sáng chế, tôi không nhấn mạnh rằng mã của tôi ĐÃ sử dụng bộ đệm Java NIO, nhưng thoạt nhìn ít nhất, nó có vẻ giống như một 'betta' để giải quyết vấn đề này.
Bất kỳ ai có bất kỳ đề xuất nào cho trình đọc UDP Java nhanh, đơn giản và liệu có một "cách tốt nhất" được chấp nhận chung không ??
Cảm ơn, R.
NIO không có ý định nhanh hơn IO "bình thường", nó chỉ có khả năng mở rộng hơn. – skaffman
'đánh cắp cú pháp' Lol là bạn nghiêm túc? Google đã đánh cắp cú pháp java nhiều như một tác giả viết cú pháp tiếng Anh – Falmarri
@Tim Bender phải làm gì với câu hỏi này? Có thể có sự khác biệt giữa vvik Dalvik so với tiêu chuẩn jvm, nhưng nói chung nếu mọi thứ đang chậm trong jvm họ có khả năng cũng được làm chậm trên Android. Bạn có một số kiến thức về sự khác biệt có thể ảnh hưởng đến trường hợp cụ thể này không? –