1

私はそのようなクラスを持っています:

 private class verifierListener implements SerialPortEventListener {

    String outBuffer;
    char charBuffer;

    public void serialEvent(SerialPortEvent event) {
        if (event.isRXCHAR()) {//If data is available
            timeOut = 1000;
            lastReadTimer = System.currentTimeMillis();
            if (event.getEventValue() > 0) {//Check bytes count in the input buffer

                try {
                     byte[] buffer = verifierPort.readBytes(event.getEventValue());
                     //INSERT CODE HERE
                } catch (Exception ex) {
                    ex.printStackTrace();
                }

            }
        }

INSERT CODE HERE(地域で)2つの可能な実施方法で

ケースA:

                        outBuffer = new String(buffer);


                        bfrFile.print(outBuffer);
                        sysOutWriter.append(outBuffer);

ケースB:

                            for(byte bt : buffer) {
                                charBuffer = (char) bt;
                                bfrFile.print(charBuffer);
                                sysOutWriter.append(charBuffer);
                            }

コンパイルと実行の両方を行い、想定されていることを実行します。ただし、このコードを可能な限りシームレスに実行するように努めているため、ローエンドPCで送信されたデータが失われるリスクはありません。

文字列の初期化により、ケースAのオーバーヘッドが増えると思いますが、削除する前に確認したかったのです。

どちらがよりクリーンになるか、および/またはそれぞれの処理コストを決定する方法をすべて教えてもらえますか?

4

2 に答える 2

1

Windowsを使用している場合は、ctrl-alt-deleteを実行してスレッドを表示し、使用しているメモリを確認します。コードに関する限り、Stringの代わりにStringBuilderを使用することをお勧めします。オーバーヘッドに本当に違いがあるかどうかはわかりませんが、優れたコード/プログラミングの観点からは、Aである必要があります。

于 2012-01-11T20:21:10.397 に答える
1

ローエンドのPCであっても、データを失うことはありません。これは、コードとシリアルポートを介して送信される実際のデータ(オペレーティングシステムバッファー、Javaバッファーなど)の間に(いくつかの)バッファーがあるためです。速度的には、このコードを頻繁に実行していない限り(たとえば、1秒間に数千回)、違いに気付くことはありません。

これが標準のシリアル接続であり、115200ビット/秒で実行されていると仮定すると、これは、最大で1秒あたり14,400文字を取得していることを意味します。一度に1文字ずつ読んだとしても、大きなスピードヒットは見られないはずです。

于 2012-01-11T20:28:11.167 に答える