long end=System.currentTimeMillis()+60*10;
InputStreamReader fileInputStream=new InputStreamReader(System.in);
BufferedReader bufferedReader=new BufferedReader(fileInputStream);
try
{
while((System.currentTimeMillis()<end) && (bufferedReader.readLine()!=null))
{
}
bufferedReader.close();
}
catch(java.io.IOException e)
{
e.printStackTrace();
}
我实际上尝试在600毫秒的时间内完成上述操作,之后它不应该允许读取但缓冲读取器的读取线是阻塞的。请帮助
答案 0 :(得分:3)
您可以查看BufferedReader.available()&gt;如果有要读取的字符,则为0。
String s;
while((System.currentTimeMillis()<end))
{
if (bufferedReader.available() > 0)
s += bufferedReader.readLine();
}
bufferedReader.close();
答案 1 :(得分:2)
long end=System.currentTimeMillis()+60*10;
InputStreamReader fileInputStream = new InputStreamReader(System.in);
BufferedReader bufferedReader = new BufferedReader(fileInputStream);
try {
while ((System.currentTimeMillis() < end)) {
if (bufferedReader.ready()) {
System.out.println(bufferedReader.readLine());
}
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
if (bufferedReader != null) {
bufferedReader.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
答案 2 :(得分:1)
唯一可靠的方法是启动一个工作线程并在其中进行实际读取,而调用者线程将监视延迟。
如果工作线程等待的时间超过允许的范围,主线程将终止它并抛出异常。
答案 3 :(得分:0)
BufferReader.readLine()可以阻塞很长时间。
你的文件是否包含这么长的行?
如果是,您可能需要拆分行,或者使用像BufferReader.read()这样的per-char读取方法。