4

InputStreamファイルから一定の間隔で行を提供する を書いています。私はBufferedReader以前使用していましたが、バッファリングの問題に遭遇しました (ファイル全体が読み取られるまで何も取得されませんでした)。とにかく速度は問題ではありません (間隔は毎秒、または 0.5 秒ごとのようなものです - それらの行に沿って)。バッファリングされていないことを除いて、のreadLineようなメソッドを持つクラスはありますか?BufferedReader

(編集:確認しました-クラスは機能しているようです。明らかに問題は出力にありました)

ストリーム ( OnlineDataSimulator) を使用したコードを次に示します。私はすでにチェックしましたが、ストリームはまさに私が望んでいることをしているので、出力に何か問題があるようです。(実際の問題は、出力を X ミリ秒ごとに発生させたいことです。X は の 2 番目のパラメーターOnlineDataSimulatorです。このコードを実行すると、最初に X*lines が待機し、次に出力全体が一度に出力されます。)

        System.out.println("Testing:");
        PrintStream fout = new PrintStream(new FileOutputStream("testfile"));
        for(int i=0; i<20; ++i) {
            fout.println(i);
        }
        fout.close();
        BufferedReader fin = new BufferedReader(new InputStreamReader(
                new OnlineDataSimulator("testfile",250)));
        String line;
        while((line=fin.readLine())!= null){
            System.out.println(line);
            System.out.flush();
        }
        fin.close();
        (new File("testfile")).delete();
4

3 に答える 3

5

このようにしてみてください....これは私にとってはうまくいきました..

File f = new File("path");
FileReader fr = new FileReader(f);
BufferedReader br = new BufferedReader(fr);

String s = null;

while ((s=br.readLine())!=null)
    {

           System.out.println(s);
    }
于 2012-07-07T18:33:50.503 に答える
0

実際のバッファを持ちたくないが、の機能を使用したい場合はBufferedReader、バッファ サイズ 1 で初期化できます。速度は問題ではないとコメントしたように、おそらく最も信頼できるソリューションです。

new BufferedReader(reader, 1)

public BufferedReader(Reader in, int sz)

独自のメソッドを実装する場合は、ここreadLine()でメソッドのソース コードを確認できます。

于 2012-07-07T17:33:11.787 に答える
0

いいえ、バッファなしのオプションは他にありません。解決策は、基になるストリームとして InputStreamReader を持つ独自の Reader を作成し、readLine() メソッドで、「\n」が見つかるまで、基になる入力ストリーム リーダーの read() を呼び出すことです。これらをすべて集約し、文字列として返します。

于 2012-07-07T17:29:28.517 に答える