【问题标题】:Write data in short using java用java简写数据
【发布时间】:2026-02-07 22:05:01
【问题描述】:

我正在尝试使用 java 将数据写入我的串行端口。现在我只能将数据填充到表格中。请问有什么办法可以将短数据写入串口。

这是我的代码:

    static short[] bytearray = {0x02, 0x08, 0x16, 0x00, 0x00, 0x33, 0xC6 , 0x1B};
    outputStream = serialPort.getOutputStream();
    outputStream.writeShort(bytearray);
    outputStream.flush();

我无法在输出流写入方法中使用 write short。谁能帮我这个。谢谢。

【问题讨论】:

  • outputStream的类型是什么?为什么你有一个名为byteArrayshort 数组? (混淆事物的方式......)你得到什么错误?
  • @JonSkeet 我很抱歉变量名。我收到的错误消息是short[] cannot be converted to int。我实际上正在尝试将数据写入我的串行端口。这是我第一次使用 Java 串口插件。你能帮我解决这个问题吗?
  • 嗯,错误很明显,您将一个数组放入一个只需要一个元素的方法中!循环遍历您的数组并一次将一个元素写入流中。
  • @JPMoresmau 我必须做这样的事情吗? for(int i=0; i<bytearray.length; i++){ outputStream = serialPort.getOutputStream(); outputStream.write(bytearray[i]); outputStream.flush(); } 抱歉造成的影响
  • 是的,就是这样...如果您的数组可以具有可变长度,您可能希望从长度开始,但当然这取决于另一端的预期。

标签: java bytearray short


【解决方案1】:

据我了解,writeShort 将一个整数作为参数并将两个短路发送到端口。所以你所要做的就是将两个 short 转换成一个 int 并用它调用方法。

outputStream = serialPort.getOutputStream();
for (int i = 0; i < bytearray.length; i+=2) {
   outputStream.writeShort((bytearray[i + 1] << 16) | bytearray[i]);
}
outputStream.flush();

请注意,此代码未经测试 - 仅供参考!尤其是bytearray[i + 1] 位会抛出索引越界!

【讨论】:

  • 对不起,它显示的 writeShort 方法cannot find symbol
  • 如果短裤数量奇数会怎样?
【解决方案2】:

这应该取决于谁在读取您正在写入串行端口的数据。如果它也是您正在开发的 java 程序,最简单的方法是使用ObjectOutputStream 写入您的短裤数组,然后使用ObjectInputStream 在另一边读取它。另一方面,如果对方是设备,您需要担心它是否接受 BigEndian 或 LittleEndian 格式的数字。您可以编写一个方法将您的短裤数组转换为字节数组并使用OutputStream#write

【讨论】: