java的輸出流與輸入流的講解

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  各佔一個字節,當在控制檯進行回車操作時會向輸入流中寫入這兩個編碼
 */

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章