package test;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
public class TestIo {
public static void main(String[] args) {
//創建標準輸入流的對象
InputStream is = System.in;
//創建標準輸出流的對象
OutputStream os = System.out;
try {
//創建指定長度的緩衝區
byte[] buffer = new byte[10];
//定義結束條件,檢測實際的讀取字節長度
int len = 0;
//len接收輸入流is向Buffer實際讀入的字節長度
len = is.read(buffer, 0, 4);
//循環(無所謂,在這裏呈現的是可以一直在控制檯測試的結果)
while (len != -1) {//如果輸入流不是控制檯接收的,是從資源讀取時,當讀取完資源時read返回-1,即結束循環
//顯示實際的讀取字節長度
System.out.println("緩存字符長度:"+len);
//os接收由Buffer中向外寫入的信息,並直接顯示在控制檯
os.write(buffer, 0, 4);
System.out.println("---------------");
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
/*
測試結果呈現:
從鍵盤輸入: 12345
控制檯輸出結果:
緩存字符長度:4
1234---------------
緩存字符長度:3
5
4---------------
從呈現的結果並結合API分析得到:
緩衝區域內的數據一旦寫入就會一直存在,等待下一次讀入數據的覆蓋;
所以,當第二次的讀入操作長度沒有達到指定緩存區長度時,
緩存區內會有上一次數據的殘留,
這就是最後4輸出的原因;
注意:在UTF-8編碼下,回車 \r ,換行 \n 各佔一個字節,當在控制檯進行回車操作時會向輸入流中寫入這兩個編碼
*/