4

我正在编写一个InputStream以恒定间隔从文件中提供行的方法。我以前用过BufferedReader,但遇到了缓冲问题(在读取整个文件之前没有得到任何东西),而且速度无论如何都不是问题(间隔是每秒或每半秒 - 沿着这些线)。除了无缓冲之外,是否有一个具有readLine类似 in 方法的类?BufferedReader

(编辑:我刚刚检查过 - 我的课似乎可以工作,显然问题出在输出上)

这是我使用流 ( OnlineDataSimulator) 的代码。我已经检查过了,流完全符合我的要求,所以显然我对输出做错了。(实际的问题是,我希望每 X 毫秒输出一次 - X 是 . 的第二个参数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

不,没有其他非缓冲选项。一种解决方案是编写您自己的 Reader,它具有 InputStreamReader 作为底层流,并且在 readLine() 方法中,您应该调用底层输入流读取器的 read() 直到找到“\n”。聚合所有这些并将它们作为字符串返回。

于 2012-07-07T17:29:28.517 回答
0

如果您不想拥有真正的缓冲区但想使用您的功能,BufferedReader可以使用缓冲区大小 1 对其进行初始化。正如您评论的那样,速度不是问题,也许是最可靠的解决方案。

new BufferedReader(reader, 1)

public BufferedReader(Reader in, int sz)

如果你想实现自己的,你可以在这里readLine()查看方法源代码。

于 2012-07-07T17:33:11.787 回答