gpt4 book ai didi

java - InputStream.available() 在监听不断流式传输数据的蓝牙 RFCOMM 服务器时报告没有字节

转载 作者:行者123 更新时间:2023-11-30 11:51:29 25 4
gpt4 key购买 nike

我正在尝试用 Java 编写一个简单的脚本,以从吐出恒定数据流的蓝牙设备读取数据。我知道该设备可以正常工作,因为我可以使用 Python 解决我的问题,但我最终想使用 Java。

我有一些示例代码,但它卡在读取命令上。

// Ref http://homepages.ius.edu/rwisman/C490/html/JavaandBluetooth.htm
import java.io.*;
import javax.microedition.io.*;
//import javax.bluetooth.*;

public class RFCOMMClient {
public static void main(String args[]) {
try {
StreamConnection conn = (StreamConnection) Connector.open(
"btspp://00078093523B:2", Connector.READ, true);

InputStream is = conn.openInputStream();

byte buffer[] = new byte[8];
try {
int bytes_read = is.read(buffer, 0, 8);
String received = new String(buffer, 0, bytes_read);
System.out.println("received: " + received);
} catch (IOException e) {
System.out.println(" FAIL");
System.err.print(e.toString());
}
conn.close();
} catch (IOException e) {
System.err.print(e.toString());
}
}

请注意,问题似乎是 read() 调用认为没有可用数据。但是,蓝牙设备不断吐出数据(它是一个传感器)。这是我的 Python 代码,它确实有效:

In [1]: import bluetooth

In [2]: address = "00:07:80:93:52:3B"

In [3]: s = bluetooth.BluetoothSocket(bluetooth.RFCOMM)

In [4]: s.connect((address,1))

In [5]: s.recv(1024)
Out[5]: '<CONFIDENTIALDATAREMOVED>'

请帮忙,

谢谢!

最佳答案

read会阻塞等待数据;更好的习惯用法是使用 available():

int bytesToRead = is.available();
if(bytesToRead > 0)
is.read(buffer, 0, bytesToRead);
else
// wait for data to become available

关于java - InputStream.available() 在监听不断流式传输数据的蓝牙 RFCOMM 服务器时报告没有字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7415308/

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