Java 如何使用Google protobuf通过串行端口进行通信?

Java 如何使用Google protobuf通过串行端口进行通信?,java,protocol-buffers,rxtx,Java,Protocol Buffers,Rxtx,我正在从事一个使用开发板上的应用程序并与之通信的项目,我遇到了一些问题,这意味着我可能用错误的方式做事。以下是我目前向董事会提交请求的方法(读取代码类似): 以下是用于准备RXTX串行连接的设置,RXTX串行连接反过来提供write命令使用的OutputStream: // The baud rate to use when connecting to the development board private final static int BAUD_RATE = 115200; // Th

我正在从事一个使用开发板上的应用程序并与之通信的项目,我遇到了一些问题,这意味着我可能用错误的方式做事。以下是我目前向董事会提交请求的方法(读取代码类似):

以下是用于准备RXTX串行连接的设置,RXTX串行连接反过来提供
write
命令使用的
OutputStream

// The baud rate to use when connecting to the development board
private final static int BAUD_RATE = 115200;
// The timeout to use for the serial port
private final static int CONNECTION_TIMEOUT = 50;
// The serial break for the development board, 100
private final static int SERIAL_BREAK = 100;

// <SNIP> ...

SerialPort serialPort = (SerialPort)port.open(appName, CONNECTION_TIMEOUT);
serialPort.setSerialPortParams(BAUD_RATE, 
                               SerialPort.DATABITS_8,
                               SerialPort.STOPBITS_1,
                               SerialPort.PARITY_NONE);
serialPort.setFlowControlMode(SerialPort.FLOWCONTROL_NONE);
serialPort.sendBreak(SERIAL_BREAK);
//连接到开发板时使用的波特率
专用最终静态整数波特率=115200;
//用于串行端口的超时
专用最终静态int连接\u超时=50;
//开发板的序列中断,100
专用最终静态整数序列中断=100;
//  ...
SerialPort SerialPort=(SerialPort)port.open(appName,连接超时);
serialPort.setSerialPortParams(波特率,
SerialPort.DATABITS_8,
SerialPort.STOPBITS_1,
串行端口。奇偶校验(无);
serialPort.setFlowControlMode(serialPort.FLOWCONTROL\u无);
serialPort.sendBreak(串行中断);
所使用的
OutputStream
是由RXTX准备的,开发板似乎表示正在接收数据,但数据被弄乱了,或者无法理解

到目前为止,所有常见的可疑问题(如未建立串行连接、通信问题等)都已消除,因此问题似乎在于如何调用
writeTo
,因为通过串行连接的通信是成功的


关于在串行连接上使用protobuf的文档似乎很少,因此我假设传递
OutputStream
应该足够了。这实际上是正确的,还是通过串行连接发送响应的错误方式?

值在导线上使用小端字节顺序。这通常是在两端使用协议缓冲区时发生的,但在这种情况下可能会造成问题。如果是这样的话,您可以使用
java.nio.ByteBuffer
实现转换,正如建议的那样。

您的硬件真的理解protobuf的特殊格式吗?
// The baud rate to use when connecting to the development board
private final static int BAUD_RATE = 115200;
// The timeout to use for the serial port
private final static int CONNECTION_TIMEOUT = 50;
// The serial break for the development board, 100
private final static int SERIAL_BREAK = 100;

// <SNIP> ...

SerialPort serialPort = (SerialPort)port.open(appName, CONNECTION_TIMEOUT);
serialPort.setSerialPortParams(BAUD_RATE, 
                               SerialPort.DATABITS_8,
                               SerialPort.STOPBITS_1,
                               SerialPort.PARITY_NONE);
serialPort.setFlowControlMode(SerialPort.FLOWCONTROL_NONE);
serialPort.sendBreak(SERIAL_BREAK);