/*
兩種基本的流是:輸入流(Input Stream)和輸出流(Output Stream)
。可從中讀出一系列位元組的對象稱為輸入流。
而能向其中寫入一系列位元組的對象稱為輸出流。
System.out.println 中的 out 是 PrintStream 類對象 System類的靜态成員可以向 輸出流寫入資料
System.in.read() in 是InputStream類的成員 可以從鍵盤等輸入裝置讀取位元組資料
利用FileInputStream FileOutputStram就可以完成對檔案的讀寫操作
這些類從 InputStream 和 OutPutStram派生來 重寫了 read 和write方法
*/
import java.io.* ;
class StreamTest
{
public static void main(String []args) throws Exception
{
/* 代碼1: int data ;
while((data=System.in.read())!=-1) //Ctrl+C
{
System.out.write((char)data); //一次向輸入流寫一個位元組
//這裡有一個疑問是為什麼每次寫入一個位元組但是隻有回車的時候
// 才回輸出輸入資訊 ?
//因為我們是向輸出流裡面寫入資料 因為在輸入回車之前資料都是通過write寫入到了
//流當中并沒有直接輸出到螢幕 隻有回車之後提示輸入結束 那麼 緩沖區資料将 全部
// 列印到螢幕
}
*/
/* 代碼2
下面來對檔案進行讀寫
FileInputStream 和 FileOutPutStram派生來 重寫了 read 和write方法
FileOutputStream fop=new FileOutputStream("output.txt",true); //建立一個 與output.txt關聯的檔案流 會建立一個檔案在目前目錄下 檔案追加形式
fop.close() ;//關閉輸出流
FileInputStream fis=new FileInputStream("output.txt");
int data ;
byte []buf=new byte[100];
int len=fis.read(buf,0,100); //讀取100位元組的資料傳回實際讀取的位元組數
System.out.println(new String(buf,0,len)); //因為是位元組數組 是以通過 new String()重載方法實作
fis.close() ;//關閉輸入流
*/
//代碼3 過濾流 在一個流的基礎上 連接配接另外一個流 到緩沖區 要flush 或者 close過濾流才能從緩沖區寫出
//BufferedInputStream BufferedOutputStream
//其實過濾流就是在在原來的流的基礎上連接配接了一個流 通過原來流的資料會先經過過濾流我們進而能對原來的
//流資料進行修改操作
// 因為buffered提供了一個緩沖的讀寫 是以資料都會先經過一個緩沖區 再到原來的流中
FileOutputStream fop=new FileOutputStream("output.txt",true);
BufferedOutputStream bos=new BufferedOutputStream(fop);//建立一個過濾輸出流 資料是經過這個流寫到标準輸出流
bos.flush() ; //如果不重新整理或關閉 過濾流那麼 就不會輸出到 檔案輸出流 進而不會輸出到檔案
FileInputStream fis=new FileInputStream("output.txt"); //建立檔案輸入流
BufferedInputStream bis=new BufferedInputStream(fis);
int len=bis.read(buf,0,100);//從過濾流讀取資料
System.out.println(new String(buf,0,len)) ; //從過濾流讀取資料
bis.close() //關閉過濾流
}
}