どのように私はシリアルポートからテキストを読むのですか?
-
20-08-2019 - |
質問
私は、JavaによるWindowsのシリアルポートのオフデータを読み取るしようとしています。私はjavax.commライブラリを持っており、いくつかのデータではなく、正しいデータを取得することができています。私はバイト配列にポートを読み込み、テキストに変換するとき、私は一連の文字が、本当のテキスト文字列を取得します。私は、「UTF-8」と「US-ASCII」の両方としてバイト配列を指定しようとしました。誰もがこのうち実際のテキストを取得する方法を知っていますか?
ここに私のコードは次のとおりです。
while (inputStream.available() > 0) {
int numBytes = inputStream.read(readBuffer);
System.out.println("Reading from " + portId.getName() + ": ");
System.out.println("Read " + numBytes + " bytes");
}
System.out.println(new String(readBuffer));
System.out.println(new String(readBuffer, "UTF-8"));
System.out.println(new String(readBuffer, "US-ASCII"));
最初の3行の出力は、(彼らは通常の文字ではありませんので、私は仮定)私はコピー&ペーストせません。ここでは六角の出力は次のようになります。 78786000e67e9e60061e8606781e66e0869e98e086f89898861878809e1e9880
私は、文字列の形式で出力を行いHollux GPSデバイスから読んでいます。私はC#のを通してそれをやったので、私は確かにこのことを知っています。
私はC#のアプリで仕事から右にいることを知っている私は通信のために使用しています設定は次のとおりです。 ボーレート:9600 データビット:8 ストップビット: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) { ... }
他のヒント
これは、接続されたデバイスは、テキストプロトコルを使用していない可能性があります。多くのデバイスは、テキストがその中に埋め込まれていてもよいバイナリメッセージ形式を使用するが、よりコンパクトなコードで他の情報を表します。
あなたの質問を編集して、そのようなあなたが実行しているコードから取得し、シリアルポート経由で通信しているデバイス、および出力としてより多くの情報を提供してください。追加する別の有用な出力は、あなたが読んだデータの16進表現を出力ものになるだろう。そのための間に合わせと-方法は以下の通りです。
import java.math.BigInteger;
...
System.out.println(new BigInteger(1, readBuffer).toString(16));
<時間>
私はHOLUX GPSで働いていないが、私はjavax.commとガーミン・インターフェースを書かれています。その場合、ユニットは、デフォルトで独自の(バイナリ)のGarminプロトコルを使用するが、(テキストベース)NMEA 0183プロトコルは、デバイス上で有効にすることができます。それはあなたが独自のHOLUXのメッセージ・フォーマットを受信し、プロトコルを切り替えるためにGPSユニットにいくつかのコマンドを使用する必要があることは可能ですか?
byte[] readBuffer = null;
try {
while (inputStream.available() > 0) {
int n = inputStream.available();
readBuffer = new byte[n];
inputStream.read(readBuffer, 0, n);
}
String y = new String(readBuffer, StandardCharsets.ISO_8859_1);
String str = new String(readBuffer, "UTF-8");
jTextField3.setText(" " + str+ " ");
バイナリから文字列に私を喜ば