我正在写一个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();
答案 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,以防您想要实现自己的代码。