Java - 来自缓冲读卡器的打印线

时间:2012-07-07 17:20:33

标签: java

我正在写一个InputStream,它以恒定的间隔从文件中提供行。我之前使用过BufferedReader,但遇到了缓冲问题(直到读完整个文件才得到任何东西),速度也不是问题(间隔类似于每秒,或者每一半)第二 - 沿着这些路线)。是否有类readLine方法的类,如BufferedReader,除了无缓冲?

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

这是我使用流(OnlineDataSimulator)的代码。我已经检查过了,流确实完全符合我的要求,所以显然我输出的内容有问题。 (实际问题是,我希望输出每隔X毫秒发生一次 - X是OnlineDataSimulator的第二个参数。当我运行此代码时会发生什么,我首先得到X *行等待然后是整个输出马上改变。)

        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();

3 个答案:

答案 0 :(得分:4)

以这种方式试试....这对我有用..

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);
    }

答案 1 :(得分:0)

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

答案 2 :(得分:0)

如果您不想拥有真正的缓冲区但希望使用BufferedReader的功能,可以使用缓冲区大小1初始化它。当您评论速度不是问题时可能是最可靠的溶液

new BufferedReader(reader, 1)

public BufferedReader(Reader in, int sz)

您可以查看readLine()方法源代码here,以防您想要实现自己的代码。