Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows下的Java串行通信_Java_Windows_Serial Port - Fatal编程技术网

Windows下的Java串行通信

Windows下的Java串行通信,java,windows,serial-port,Java,Windows,Serial Port,我一直在寻找一种可以在Windows/Win32上与串行设备通信的Java API,但我签出的许多API要么是针对Linux的,要么太过时,要么就是受到了批评 有人能向我推荐一个他们已经尝试过或知道在Windows XP上易于实现的工具吗?我几周前就开始寻找同样的工具,到目前为止,我对多平台库非常满意。适用于任何Windows、Linux和OS X。具有非常干净、易于理解的API 编辑:RXTX也是开源的。毫无保留,我从serialio.com推荐;我在Sun、IBM和RxTx串行包中遇到了严重

我一直在寻找一种可以在Windows/Win32上与串行设备通信的Java API,但我签出的许多API要么是针对Linux的,要么太过时,要么就是受到了批评


有人能向我推荐一个他们已经尝试过或知道在Windows XP上易于实现的工具吗?

我几周前就开始寻找同样的工具,到目前为止,我对多平台库非常满意。适用于任何Windows、Linux和OS X。具有非常干净、易于理解的API


编辑:RXTX也是开源的。

毫无保留,我从serialio.com推荐;我在Sun、IBM和RxTx串行包中遇到了严重的稳定性问题。SerialPort在5年多的时间里实现了全天候稳定的生产


他们支持标准Java串行API,以及他们自己的替代专有API。不过,我还是会坚持使用标准API,除非你真的需要他们的API,而标准API并没有,只是为了让你的选择保持开放。

Java以其脆弱的串行I/O支持而臭名昭著。在之前的一项工作中,我们尝试了RXTX和SerialIO,用于从Teknic伺服控制器以56kbps的速度传输数据的应用程序,发现它们占用了大量CPU。也许对于不需要从串行端口连续传输的应用程序,这两个库都很好,但我们不认为从串行端口传输I/O会持续消耗机器上15-30%的CPU,而JVM中需要响应的其他线程非常需要它

相反,我们在C++中创建了一个服务器,它将从伺服上的串行端口读取数据流,转换/打包它,并通过套接字连接将其发送到XML中的java应用程序。C++中串行I/O服务器的CPU负载在最糟糕的情况下,几乎没有爬到1%

Java在某些方面做得很好——在我看来,串行I/O不是其中之一,这取决于应用程序的类型


最终,你甚至应该对我说的话持保留态度,并尝试两种方法,RXTX和SerialIO(这两种方法都非常便宜,java版本大约50美元),如果它们满足你的需要,那就使用它们。就我个人而言,我会坚持使用SerialIO,因为它得到了支持,并且正在积极地工作。RXTX,没有那么多。

我编写了一个开源Java库,因为现有的Java库都不符合我的需要(过时、封闭源代码、难以修改、未维护等等)

它叫JSerial,是麻省理工学院许可的,你可以在这里学到更多:


目前只支持Windows,但我计划支持Linux。如果需要,您可以使用最新的Visual Studio轻松修改本机部件。

我已经使用了五年左右。它是主动维护的,是一个纯Java(通过JNA)实现。RXTX让我失望,因为它缺乏维护和许多微妙的问题。

RXTX代码的质量相当差。如果你沿着这条路走下去,要准备好跨越各种障碍。对大多数简单的事情来说都不错。我在异常情况下遇到USB通信端口问题(例如,USB在运行时被插入/拔出)。我担心您在代码的某个地方出错;我用Java编写了一个多调制解调器串行到TCP/IP网桥,它可以轻松地将16个端口的数据流保持在56K,而在一台规模不大的circa 2005台式PC(使用RocketPort串行控制器)上的CPU中甚至不中断两位数,并且在类似硬件上使用内置串行端口轻松地保持4个端口。所有这些都有一个完整的GUI,显示端口上的实时活动。我同意。SerialIO串行端口很便宜,它支持多种平台,并且您可以获得源代码。我能想到的唯一缺点是Linux(和BSD)x64仍然不受支持。这个库立即赢得了我的支持,因为没有特定于平台的本机库可与分布式应用捆绑在一起!