我正在做一个项目,我需要从 Iridium 的短突发数据服务转换突发数据(在 300 字节范围内) 。这是为了取代拨号连接,所以我需要从短脉冲中提取这些数据,并将它们转换为拨号连接的连续流。
我是一个相对缺乏经验的程序员,我唯一知道的语言是java。
我该如何转换数据?有没有关于信息包类型如何操作以及如何在java中操作它们的背景资料?
[为清楚起见编辑]
EDIT2:我不需要以相反的方式转换数据(从流到块)
您的问题不清楚您是否正在编写与 Iridium 收发器对话的软件,或者您是否在服务器端,但我会假设您在客户端,因为根据他们的网站判断,服务器端是标准 IP联网。
该程序使用 RS-232 接口和 AT(调制解调器)命令集与收发器通信。使用 Java,您将需要某种串行库;我在这方面有丰富的经验,特别是管理一组将他们的通信桥接到 IP 网络的调制解调器的程序,当时唯一有效且稳定的通信包是来自 SerialIO 的 SerialPort。另一个可能可行的选项是RxTx,但是当我几年前使用它时,它不稳定并且每隔几天就会使 JVM 崩溃。使用任何一个,您都可以(并且应该)将自己限制在JavaComm API中,这将使您能够轻松地切换串行库。
一旦您与您的串行端口交谈,操作收发器应该与操作调制解调器相同,您需要参考文档以了解详细信息。如果它忠实于调制解调器,它将以两种模式运行,命令和数据。在命令模式下,您正在发送由 CRLF 终止的 AT xxx 命令。当您处于数据模式时,您正在发送二进制数据。
二进制数据的结构几乎肯定是由铱系统决定的,你需要遵守它;再次看到他们的doco。
如果您有定义自己的数据协议的奢侈,或者如果您在他们的协议之上有自由格式的消息,我最好的建议是使您的消息在逻辑上成为关键字/值对,以确保长期的灵活性。如果您的空间很紧(并且似乎 Iridiums 设备的大小限制相当严格),您可以使您的关键字预定义(由客户端和服务器商定)并发送二进制整数而不是 UTF-8 或 ASCII细绳。协议应该包括或推断一个非常基本的类型,以便数值,尤其是可以尽可能地压缩。
无论如何,我希望能给你一些期望的方向和想法......请随时通过评论提出问题,特别是关于使用 Java 串行端口的特定问题。