Java 串行端口库相对于设备的普通 IO 有什么好处?

What benefits do Java serial port libraries have over plain IO to the device?

关于Java RXTX 和JSSC 等串口库的讨论很多,但它们真正提供的是什么? linux和windows都可以像打开文件一样简单的打开串口进行读写,不是吗?与仅使用文件 IO 从设备读取和写入相比,使用库的优势是什么?

我知道这些库允许您配置端口,这通常需要通过命令行调用来完成。但假设端口已经配置,是否有任何理由使用这些库?

从历史上看,串行端口是为慢速通信线路(例如调制解调器)设计的。它们有 "clear to send"、"request to send"、"data terminal ready"、"hang up"、"ring" 等附加信号。一些串行设备仍在使用这些信号。这些东西仍然存在于硬件中,因此串行库应该提供 API 来访问它。

另一件事是中断。您可能不想一直轮询连接以查看是否有可用数据。 Serial APIs 通常为此提供回调或事件处理程序。

最好在应用程序中打开和关闭端口。严格来说,这不是必需的,但最好不要期望特定端口在开始时打开或在退出时将其锁定。

In both linux and windows you can simply open the serial port like a file for reading and writing, can't you?

虽然这是可能的,但这并不是推荐的方法。转到第二点:

But assuming the ports are already configured, is there any reason to use the libraries?

假设端口配置正确,那么完全可以简单的打开串口读写像一个普通的文件。不过,这确实带来了另一个警告:如果您完全依赖控制信号,您将无法从端口获取该数据。我使用过的大多数串行设备根本不对控制线做任何事情,但这并不是你总能确定的事情。

使用库的意义在于,您可以获取并设置您需要的确切设置,以便通过端口进行适当的对话。

至于 JSSC/RXTX 没有 InputStream/OutputStream,我也不喜欢那些库,所以我 wrote my own.

以下是我们考虑使用库的原因的快速列表,但主要是我觉得如果我们正在制作商业产品,而不是现成的库可能是不错的选择,否则作为学习者我们可以编写自己的库。

  1. 各种操作系统的一致性。我们必须为所有支持的 OS 编写代码,这本身就是一项任务。
  2. 图书馆作者可能在该特定主题方面有更多经验,因此质量可能比我们更好。
  3. 完成项目的时间(上市时间)是另一个因素。
  4. 综合测试套件
  5. 除了简单 read/write 还可以是额外的功能,尤其是在 GUI 驱动的产品中,如热插拔和视觉指示等。
  6. 库可能会实现协议或规范意味着简单 read/write 可能会包装在流中,其中隐藏了串行端口特定的东西,并且统一层暴露给应用程序。
  7. 支持更广泛的硬件设备,尤其是 USB-UART 看看这 2 个开源库 1st library and 2nd library
  8. 支持嵌入式和桌面OS