如何阅读从一个串口文本?
-
20-08-2019 - |
题
我尝试过通过Java在Windows串口读取数据。我有javax.comm库和我能够得到一些数据,但不正确的数据。当我读的是端口入一个字节数组,并将其转换为文本,我收到了一系列字符,但没有真正的文本字符串。我试图指定字节数组作为既是“UTF-8”和“US-ASCII”。有谁知道如何获得真正的文字出来的呢?
下面是我的代码:
while (inputStream.available() > 0) {
int numBytes = inputStream.read(readBuffer);
System.out.println("Reading from " + portId.getName() + ": ");
System.out.println("Read " + numBytes + " bytes");
}
System.out.println(new String(readBuffer));
System.out.println(new String(readBuffer, "UTF-8"));
System.out.println(new String(readBuffer, "US-ASCII"));
的前三行的输出不会让我复制和粘贴(I假设,因为它们是不正常的字符)。这里是十六进制的输出: 78786000e67e9e60061e8606781e66e0869e98e086f89898861878809e1e9880
我从一个Hollux GPS装置,其确实在字符串格式输出读数。我知道这是肯定的,因为我做到了通过C#。
这是我使用的通讯,我知道是从C#应用程序的工作是正确的设置: 波特率:9600 数据位:8 停止位:1 奇偶:无
解决方案
我无法从你的代码告诉我们,但它看起来像你使用java.io.InputStream
读取对象。您应该使用java.io.BufferedReader
或java.io.InputSreamReader
。
有很多方法可以做到这一点,但是这是我们用什么:
javax.comm.SerialPort port = ...{initialize your serial port}
BufferedReader portReader =
new BufferedReader(new InputStreamReader(port.getInputStream()));
try {
String line = portReader.readLine();
} catch(IOException e) { ... }
其他提示
这可能是因为所连接的设备不使用文本协议。许多设备使用可以具有嵌入其中的文本的二进制消息格式,但表示具有更紧凑的代码等信息。
请编辑您的问题,并提供更多的信息,比如你通过串口通信,你从你运行的代码获得设备和输出。另一种有用的产量增加将是一些打印您已经阅读了数据的十六进制表示。对于快速和肮脏的方法如下:
import java.math.BigInteger;
...
System.out.println(new BigInteger(1, readBuffer).toString(16));
我还没有与长天GPS工作,但我已经写有javax.comm仪接口。在这种情况下,该单元采用了专有(二进制)的Garmin默认协议,但(基于文本的)NMEA 0183协议可以在设备上被启用。是否有可能正在接收专用的长天消息格式,并且需要使用一些命令GPS单元可以切换协议?
byte[] readBuffer = null;
try {
while (inputStream.available() > 0) {
int n = inputStream.available();
readBuffer = new byte[n];
inputStream.read(readBuffer, 0, n);
}
String y = new String(readBuffer, StandardCharsets.ISO_8859_1);
String str = new String(readBuffer, "UTF-8");
jTextField3.setText(" " + str+ " ");
请给我从串二进制