這裏是一個模擬InputStream
模擬緩慢液流:如何以最小的延遲掃描緩慢的InputStream?
class SlowInputStream extends InputStream{
private String internal = "5 6\nNext Line\n";
private int position = 0;
@Override
public int available(){
if(position==internal.length()) return 0;
else return 1;
}
@Override
public int read() throws IOException {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
throw new IOException("Sleep Interrupted");
}
if(position==internal.length()) return -1;
return internal.charAt(position++);
}
}
在這裏被測試的代碼:
Scanner s = new Scanner(new SlowInputStream());
int i=s.nextInt();
System.out.println("i="+i);
int j=s.nextInt();
System.out.println("j="+j);
s.nextLine();
String line = s.nextLine();
System.out.println("line="+line);
s.close();
上述代碼的行爲是它停止了一段時間,並打印三行。什麼樣的代碼可以輸出相同的東西,但是可以將行間的等待時間分開?
什麼'InputStream的默認緩存'你在說什麼?爲什麼Readable可以解決這個想象中的問題? – EJP
我認爲這是一個錯誤。緩存實際上由'Scanner'使用。如果掃描器是從'InputStream'創建的,它將嘗試每次讀取特定數量(在我的情況下是4096字節)的數據。因此在這個例子中,它將繼續讀取,直到收到所有數據。通過使用「Readable」或「ReadableByteChannel」,只有在需要時,「Scanner」纔會讀取字節。 –