我需要在两个线程之间传输大量的数据(原始字节) - 监听线程和另一个处理数据操作的线程。什么是最好和最快的方法?
我需要在两个线程之间传输大量的数据(原始字节) - 监听线程和另一个处理数据操作的线程。什么是最好和最快的方法?
public class ProducerThread extends Thread{
byte[] data;
public void run(){
while (isRunning){
Looper.prepare();
data = someMethodToGetYourByteData();
Message dataToSend = Message.obtain();
Bundle bundle = new Bundle();
bundle.putByteArray("data", data);
dataToSend.setData(bundle);
if (ConsumerThread.mHandler!=null){
ConsumerThread.mHandler.sendMessage(dataToSend);
}
Looper.loop();
}
}
以及你的消费者线程:
public class ConsumerThread extends Thread{
public static Handler mHandler;
byte[] data;
public void run(){
while (running){
Looper.prepare();
mHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
mHandler.obtainMessage();
data = msg.getData().getFloatArray("data");
doSomethingWithData(data);
};
}
Looper.loop();
}
请记住,这可能不是最好的模式,因为许多人在其他地方指出,扩展线程并不是最好的想法,但通常取决于用例。
既然你谈到了大量数据,最好的方法是将byte[]封装在一个对象中。你可以自己创建自定义类,但大多数人使用ByteBuffer,因为它已经有了良好的操作API,并且可以与Java NIO子系统一起使用。