gpt4 book ai didi

java - Android - 如何监听蓝牙输出流被清空

转载 作者:太空宇宙 更新时间:2023-11-04 14:33:26 25 4
gpt4 key购买 nike

我有两个线程连续管理 BluetoothSocket 流上的 I/O 操作。

对于输入,没问题。InputStream.read() 方法被阻塞,一切都很好。

对于输出..这就是问题所在。

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(byte[])的作用,我明白了主要原因是什么:就像调用OutputStream(byte[], 0, length),所以'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;
}

我知道 setOnStreamEmptiedCallback 不存在,但是..有没有办法做类似的事情?有什么可以确保我永远不会覆盖流内容?

谢谢大家..

最佳答案

flush() 应该可以解决您的问题。

this.mOutStream.write(buffer);
this.mOutStream.flush();

关于java - Android - 如何监听蓝牙输出流被清空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25867378/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com