Java Android-如何监听蓝牙输出流被清空
我有两个线程可以连续管理BluetoothSocket流上的i/O操作 对于输入,没有问题。。read()方法被阻塞,一切正常 对于输出。。问题来了Java Android-如何监听蓝牙输出流被清空,java,android,bluetooth,callback,outputstream,Java,Android,Bluetooth,Callback,Outputstream,我有两个线程可以连续管理BluetoothSocket流上的i/O操作 对于输入,没有问题。。read()方法被阻塞,一切正常 对于输出。。问题来了 public void write(final byte[] buffer) { synchronized (this) { try { this.mOutStream.write(buffer); this.mHandler.sendEmptyMessage(Constant
public void write(final byte[] buffer) {
synchronized (this) {
try {
this.mOutStream.write(buffer);
this.mHandler.sendEmptyMessage(Constants.MESSAGE_SENT);
} catch (IOException e) {
Log.e(LOGTAG, "Exception during write", e);
}
}
}
我使用上面的代码在输出流上编写消息。它是在线程实例上同步的,这样其他任何人都无法竞争性地在缓冲区上写入
问题如下:如果我尝试写两条消息,一条紧接着另一条,第一条消息似乎被接收设备跳过
阅读OutputStream.write(字节[])的功能,我了解其主要原因:这就像调用OutputStream(字节[],0,长度),因此“0”偏移量将覆盖上一条消息
但我不能在每次需要按顺序写两封邮件时设置计时器或超时,只是为了确保同时收件人已经阅读了第一封邮件
我想要更多,像这样的东西:
int offset = 0;
this.mOutputStream.setOnStreamEmptiedCallback(new OnStreamEmptiedCallback() {
public void onStreamEmptied() {
this.offset = 0;
}
});
public void write(byte[] buffer) {
this.mOutputStream.write(buffer, 0, buffer.length);
this.offset += buffer.length;
}
我知道setOnStreamOptiedCallback
不存在,但是。。有没有类似的方法?可以确保我永远不会覆盖流内容吗
谢谢大家。flush()应该可以解决您的问题
this.mOutStream.write(buffer);
this.mOutStream.flush();