0

説明するのは少し難しいです。私はこの問題についていくつかのグーグル検索を行いましたが、それが役立つと思われるものは何も見つかりませんでした. IDE を制限しているのが私のコンピューターであるかどうかはわかりません (6 GB RAM、AMD A10-5745M APU 2.10 GHz、Windows 8 64 ビット、現時点で IDE が使用できる最大値は 495M のようですが、 70M を超えたことはありません) 問題をさらに説明する前に、コードを共有します:私がこれまでに書いた唯一のもの。

public void readText(String text){
      String textArray[]= new String[text.length()];
        for(int b = 0; b <text.length(); b++){
            String countText = text;
            textArray[b] = countText.substring(b,b+1);
        }

        for(int countPrint = 0; countPrint < textArray.length; countPrint++){
            System.out.print(textArray[countPrint]);
            try {
                Thread.sleep(50);
            } catch (InterruptedException e) {
                e.printStackTrace();  
            }
        }
    }

したがって、基本的に、私の方法は、文字ごとに遅延した間隔でテキストを読み取ることです。したがって、呼び出すreadText("Hello");H(wait 50 ms) e(wait 50 ms) l(etc) などと表示されるため、誰かが入力しているように見えます。(私はタイマーを使用するつもりでしたが、グーグルとこのサイトから、Thread.sleep(number)セットアップがはるかに簡単で、スペースをとらないことがわかりました)

すべてを説明したので、問題は、50 ミリ秒などの短いミリ秒になると、文字ごとに完全に表示されないことです。たとえば、800 ミリ秒を選択すると、各文字が正しく読み取られ、それらを毎秒ほぼ1つ吐き出します。しかし、それが速くなればなるほど、より多くの塊になります。「こんにちは、私の犬は黄色で、私の芝生はピンクです」というフレーズがあるとします。コードのようにそれを印刷する場合Thread.sleep(50)、(各文字を個別に(非常に高速ではありますが)印刷する代わりに)チャンクで印刷しますchunk1(Hel) chunk2(lo, my) chunk3(dog i) chunk4(s yello)等々。今、私はそれをIDEに絞り込んだことを知っています.Eclipseで同じコードを実行したとき、ほぼ完全に印刷されたからです(チャンクを印刷することもありましたが、実際に印刷したときは、5文字や6文字ではなく、2文字だけでした. Jidea で) 私は Eclipse でより速い速度を試しませんでしたが、50ms はそれほど気にならなかったようで、確かに前者よりもはるかに正確に実行されました。「リアルタイム」自体で印刷しない理由についてのアイデアはありますか?

4

1 に答える 1

0

あなたの問題についての私の最善の推測は、それは出力のバッファリングによるものです。

System.outバッファリングされます (つまり、print を呼び出したときに必ずしもすぐに端末に書き込むとは限りませんが、書き込みを遅らせたり、複数の印刷呼び出しを 1 つのコンソール書き込みにまとめたりすることができます)。

flush各文字の後に( ie )を発行してみてSystem.out.flush()、それが役立つかどうかを確認できますが、それほど単純ではない可能性があります。

IDE 内で端末 I/O がどれくらいの速さで発生するかについて心配しすぎるのは気が進まないでしょう。その役割を担うことができるものはたくさんありますが、通常は気にする必要はありません。気にするのであれば、IDE 内から実行するよりもコマンドラインから実行した方がよいでしょう。

于 2013-10-24T06:48:47.767 に答える