我最近偶然发现了Java Communication API,这是一个javax
包,用于纯Java中的“串行通信”。我以前多次听说过串口通讯,但我想我不明白“串口通讯”究竟意味着什么,或者它意味着什么。
根据Wikipedia:
在电信和计算机科学中,串行通信是通过通信信道或计算机总线一次一位地发送数据的过程。
好的......所以Java Communication API允许我一次一位地读/写数据。 但这甚至意味着什么?!我不能自己这样做(这里是伪代码)?:
String str = "I want to send this bit by bit.";
byte[] strAsBytes = str.getBytes();
byte[] bits = new byte[strAsBytes.length * 8]; // For each byte we need 8 bits.
for(int i = 0; i < strAsBytes.length; i++) {
for(int j = 0; j < 8; j++) {
// Something like this (again this is just pseudo-code).
// Regardless, populate all elements in the bits array with the
// bit in the position of the current byte.
bits[i*j + j] = getBit(strAsBytes[i], j);
}
}
// Sends the array of bits over a network, maybe using Netty and TCP,
// or something. Sends each bit one by one.
networkManager.sendBitByBit(bits);
// Retrieves the value of a bit at any position in a byte (theByte).
public byte getBit(byte theByte, int position) {
return (theByte) & (0x01 << pos) ;
}
我觉得“串行通信”这个术语不仅仅意味着“一次发送一个比特”。这是否意味着我可以用它来从机器上的串口读/写?别的什么?!?
我想我正在寻找一个简单的英语,外行解释,更广泛的术语“串行通信”是什么,以及你可以用它做什么类型的事情,然后把它放到Java Communications API的上下文中。拥有一个或两个可以使用API完成的例子也很棒。
答案 0 :(得分:2)
在这种情况下,serial指的是serial port,它是一个(很大程度上过时的)连接器,允许串行通信(实际上,这意味着不过一次只发送一位的协议,通过一根专用电线)。这与具有多条发送和接收线路的parallel port形成鲜明对比。不要让引脚数量混淆你。只有两条串行线用于数据传输,每条线在一个方向(一个用于发送,一个用于接收),如this pin diagram中所示。
Java Communications API提供了与底层系统的串行端口以及并行端口进行通信的方法,您可以从此documentation page快速查看。由于大多数现代计算机不再具有这些端口,因此该API可能仅在仍使用这些端口进行外部连接的某些嵌入式设备上运行时才有用。
This HowStuffWorks article以外行的术语解释了串口的大部分内容。
让我进一步消除“串行端口”和“串行协议”的歧义。串口使用串行协议,但USB和Firewire也是如此。它们每个方向也只有一根传输线(发送和接收),但是它们的协议和技术允许它们更快地传输数据。相比之下,并行协议需要更多功率,并且截至2013年,由于同步开销,很少(我想不出任何可以欢迎的贡献)能够与串行协议的速度相匹配。
答案 1 :(得分:1)
显示与其他通信的区别的串行通信的描述是串行通信可以在不知道要发送的所有数据的情况下开始发送数据,或者甚至知道将有多少数据。
在您的示例中,您已经拥有了要发送的所有数据,因此您无需使用串行通信来发送它。
串行通信允许您开始发送尚未存在部分数据的数据,例如,如果您在输入数据时发送数据,或者数据太大而无法一次处理所有数据。
Java Communications API处理串行端口和并行端口上的串行通信。 (是的,并行端口进行串行通信。虽然它一次发送几个位,但数据流是串行的。)