【问题标题】:Java reading from comportJava 从 comport 读取
【发布时间】:2011-04-09 00:25:47
【问题描述】:

问题:尝试通过 Java 使用 comport 从某些电子秤读取数据

我正在尝试使用 Java 从 com 端口读取数据。到目前为止,我已经成功地创建了一个使用 Java SerialPort 和 InputStream 类从 comport 读取的小型应用程序。

应用程序使用 SerialPortEventListener 来侦听通过秤的组件发送到计算机的事件。到目前为止,通过在事件侦听器中使用 InputStream 从 comport 读取一些字节,我已经取得了一些成功,但是输出没有任何意义,我不断收到以下形式的消息:

[B@8813f2

[B@1d58aae

为了澄清,当我与体重秤的键盘交互时,我在屏幕上收到了这些消息。我只需要一些帮助来正确解释输出。我是否使用正确的类来读取和写入 comport?

【问题讨论】:

    标签: java serial-port


    【解决方案1】:

    您已将数据读入byte[],然后尝试使用System.out.println(data) 转储它,其中data 被声明为byte[] data。不幸的是,这只会打印数组的内部表示,即无用的 '[' 后跟十六进制哈希码。

    相反,您想转储数组的内容。使用

    System.out.println(Arrays.toString(data))
    

    是最适合您的方法。

    否则,您需要迭代数组并打印每个字节,或者使用例如new String(data)(将使用平台默认编码)将字节数组转换为String

    【讨论】:

      【解决方案2】:

      这些看起来像是将字节数组对象打印为原始对象引用的结果。因此,您的调用很可能对 System.out.something 或 System.err.something 进行了某种混淆调用。

      【讨论】:

        【解决方案3】:

        您拥有的对象显然是一个字节数组。我认为您正在获取对象并将其打印到控制台。 见:http://download.oracle.com/javase/1.5.0/docs/api/java/lang/Class.html#getName() 和:http://download.oracle.com/javase/1.5.0/docs/api/java/lang/Object.html#toString()

        【讨论】:

        • 是的,这是正确的,有没有更好的方法来获取从 comport 发送的数据?我应该使用 InputStreamReader 还是什么?
        • 很大程度上取决于秤正在传输的内容以及您要执行的操作。 (这是您问题中的代码也有帮助的地方)您也许可以遍历该字节数组以获取内容。 InputStreamReader 是取字节流 -> 字符流(必须提供字符集)。
        • 哦,好吧...让我试试看会发生什么。我无法提供代码,因为它在另一台机器上。感谢您的反馈。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-03-21
        • 2012-01-16
        • 1970-01-01
        相关资源
        最近更新 更多