0

私はJavaで小さなプログラムを作成しました。このプログラムは、シリアルポート(一部のテキストメッセージと一部のバイナリデータ、混合)から情報を読み取り、TCPソケットを介して送信します。

最初はデータをバッファに入れて、「/ n」が到着したときにすべてを送信しようとしましたが、バイナリデータはそのようには機能しません。

私の2番目の考えは、データを常にバイト単位で送信することでした。しかし、速度が遅くなりすぎて、スレッドを使用したとしても、送信中にデータが失われていると思います。

次のアイデアは、たとえば保存されている100バイトに達したときにデータを送信することですが、これはダーティな修正です。

私のシリアルデータはGPS受信機からのものであり、これらのデバイスは通常、毎秒多くのデータセンテンス(テキストとバイナリ)を送信します(または10、50、100Hzに構成可能、モデルによって異なります)。とにかく、データを受信する時間のギャップと、何も受信しない時間のかなり大きなギャップがあります。私のデータを取り除く最も素晴らしい方法は、そのギャップを検出し、ギャップが終了したときに新しいデータが到着する前に、保存されているすべてのデータを送信することだと思います。

この種のイベントをどのように検出できますか?

編集:私はRXTXパッケージを使用してシリアルポートを取り除き、Windows764ビットで作業しています

4

2 に答える 2

1

ギャップを検出するには、enableReceiveTimeoutを使用してタイムアウトを有効にします。

于 2012-09-10T10:43:19.657 に答える
0

取得時にbyte[]バッファーを読み書きするだけで、read()メソッドによって返される実際のカウントのみを書き込むようにしてください。

于 2012-09-10T11:34:31.223 に答える