我有类似于以下内容:
public class X extends Thread{
BufferedInputStream in = (BufferedInputStream) System.in;
public void run() {
while (true) {
try {
while (in.available() > 0) {
// interesting stuff here
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
}
...这在很大程度上有效,但有时我会开始在stderr中看到以下内容(一旦发生,似乎不断重复 - 我猜这个应用程序最终会在崩溃后崩溃):
java.io.IOException: Illegal seek
at java.io.FileInputStream.available(Native Method)
at java.io.BufferedInputStream.available(BufferedInputStream.java:381)
at compactable.sqlpp.X.run(X.java:40)
......我不知道是什么原因引起的。老实说难倒。群众对如何发生这种情况的想法?
感激地收到任何/所有有用的建议: - )
答案 0 :(得分:1)
如果流已关闭,则可以调用IOException。
另外, available()并没有告诉你读取流量还剩多少,或者如果流是空的,它只会告诉您可以在不阻塞的情况下读取多少内容(基本上等待更多被放入流中)。你想要的是阅读,直到你的阅读返回 -1 。
int c;
while ( (c = in.read()) != -1 ) {
// do stuff
}
或
int readLength;
byte[] buffer = new byte[1024];
while ( (length = in.read(buffer) != -1) {
// do stuff with buffer, it now has bytes in buffer[0] to buffer[readLength-1]
}