gpt4 book ai didi

java - 在检查套接字的连接时从 BlueToothSocket 的 InputStream 中畅通读取

转载 作者:行者123 更新时间:2023-11-30 03:38:35 24 4
gpt4 key购买 nike

我正在尝试编写一个线程来执行以下操作:

1.从输入流中读取;

2.一些其他的例程;

3.如果套接字已关闭,则抛出异常。

BlueTooth Socket和来自socket的inputStream在这之前已经设置好了。代码如下:

public void run() {
byte[] buffer = new byte[1024];
int bytes;

while (true) {
try {
//if(mInputStream.available() > 0){ //-------- Line 1
bytes = mInputStream.read(buffer);
//} //-------- Line 2

//---------------------//
// some other routines //
//---------------------//

} catch (IOException e) {
connectionLost();
break;
}
}
}

问题是上面的代码会因为阻塞而卡在mInputStream.read()。但是,如果我取消注释第 1 行和第 2 行,即使 BlueToothSocket 已关闭,mInputStream.available() 函数也不会抛出异常。是否有任何方法可以取消阻止读取功能,或者在使用 available() 并关闭蓝牙套接字时抛出异常?欣赏它!

最佳答案

这是我用的:

private boolean receivedInTimelyManner(InputStream mInStream,
int bytesToReceive, long timeoutMillis) throws IOException,
InterruptedException {

long time = 0;
while (mInStream.available() < bytesToReceive && time < timeoutMillis) {

time+=5;
Thread.sleep(5);
}
if (time == timeoutMillis) {
return false;
}
return true;

}

用类似的东西包围你的阅读 block :

if receivedInTimelyManner(instream,bytes,timeout){
read()
}

关于java - 在检查套接字的连接时从 BlueToothSocket 的 InputStream 中畅通读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16212984/

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