1


0

私はJavaを通してWindowsシリアルポートからデータを読み込もうとしています。 私はjavax.commライブラリを持っていて、いくつかのデータを取得することはできますが、正しいデータは取得できません。 ポートをバイト配列に読み込んでテキストに変換すると、一連の文字が表示されますが、実際のテキスト文字列は表示されません。 バイト配列を "UTF-8"と "US-ASCII"の両方として指定しようとしました。 このテキストから実際のテキストを取り出す方法を誰かが知っていますか?

これが私のコードです:

while(inputStream.available()> 0){int numBytes = inputStream.read(readBuffer); System.out.println( "" portId.getName() "からの読み取り:"); System.out.println( "読み取り" numBytes "バイト"); }

System.out.println(new String(readBuffer)); System.out.println(new String(readBuffer、 "UTF-8")); System.out.println(new String(readBuffer、 "US-ASCII"));

最初の3行の出力は私にコピー&ペーストをさせません(それらは普通の文字ではないので私は仮定します)。 これが16進数の出力です。78786000e67e9e60061e8606781e66e0869e98e086f89898861878809e1e9880

文字列フォーマットで出力するHollux GPSデバイスから読んでいます。 私はC#を通してそれをやったので、私は確かにこれを知っています。

私が知っているコミュニケーションのために私が使っている設定はC#アプリの仕事から正しいです:ボーレート:9600データビット:8ストップビット:1パリティ:なし

3 Answer


1


接続機器がテキストプロトコルを使用していない可能性があります。 多くのデバイスは、テキストが埋め込まれたバイナリメッセージフォーマットを使用しますが、他の情報をよりコンパクトなコードで表します。

質問を編集して、シリアルポートを介して通信しているデバイス、実行しているコードから得られる出力など、より多くの情報を提供してください。 追加するもう一つの役に立つ出力はあなたが読んだデータの16進表現を印刷するものでしょう。 そのための簡単な方法は次のとおりです。

import java.math.BigInteger;
...
System.out.println(new BigInteger(1、readBuffer).toString(16));

'' '' '

私はHolux GPSで働いたことはありませんが、私はjavax.commでGarminインターフェースを書きました。 その場合、本機はデフォルトで独自の(バイナリ)Garminプロトコルを使用しますが、(テキストベースの)NMEA 0183プロトコルはデバイス上で有効にできます。 プロプライエタリなHoluxメッセージフォーマットを受信して​​いて、プロトコルを切り替えるためにGPSユニットで何らかのコマンドを使用する必要があるという可能性はありますか?


1


あなたのコードからはわかりませんが、オブジェクトを読み取るために java.io.InputStream`を使っているようです。 あなたは `java.io.BufferedReader`か java.io.InputSreamReader`のどちらかを使うべきです。

これを行うには多くの方法がありますが、これを使用します。

javax.comm.SerialPort port = ...{initialize your serial port}
BufferedReader portReader =
    new BufferedReader(new InputStreamReader(port.getInputStream()));

try {
    String line = portReader.readLine();
} catch(IOException e) { ... }


0


byte [] readBuffer = null; {while(inputStream.available()> 0){int n = inputStream.available();}を試してください。 readBuffer = new byte [n]; inputStream.read(readBuffer、0、n);文字列y =新しい文字列(readBuffer、StandardCharsets.ISO_8859_1);文字列str = new String(readBuffer、 "UTF-8"); jTextField3.setText( "" str "");

バイナリから文字列を入力してください