1. 程式人生 > >記憶體操作流/列印流/合併流

記憶體操作流/列印流/合併流

(1)記憶體操作流:適用於臨時儲存檔案.
 記憶體操作輸入流:byteArrayInputStream
 ByteArrayInputStream(byte[] buf) 
 
 記憶體操作輸出流: byteArrayOutputStream
 構造方法:ByteArrayOutputStream() 

 記憶體操作流:一個程式結束後,那麼這些程式的變數,就會從記憶體消失(馬上消失的這些資料進行讀取寫入)

示例程式:
//建立記憶體操作輸出流物件
ByteArrayOutputStream baos = new ByteArrayOutputStream() ;
for(int x = 0 ; x <10 ; x ++) {
baos.write(("hello"+x).getBytes());
//baos.close(); 該流不需要關閉
}

//從記憶體中將內從中的資料顯到控制檯上
byte[] bys = baos.toByteArray() ;//public byte[] toByteArray():構造一個字串
//建立記憶體操作輸入流物件
ByteArrayInputStream bais = new ByteArrayInputStream(bys) ;

//一次讀取一個位元組
int by = 0 ;
while((by=bais.read())!=-1) {
System.out.print((char)by);
}

(2)列印流

字元列印流(針對文字進行操作:PrintWriter)

 位元組列印流(printStream 和標準輸出流有關係 System.out;)  

 PrintWriter:屬於輸出流
 1)只能寫資料(只能針對目的地檔案進行操作),不能讀資料(不能針對原始檔進行操作)
 2)可以針對檔案直接進行操作
 如果一個類中的構造方法裡面有File物件或者String型別資料,這個類可以對文字檔案直接操作
 FileInputStream
 FileOutputStream
 FileWriter
 FileReader..
 PrintWriter
 3)自動重新整理功能::PrintWriter(OutputStream out/Writer out,boolean autoflush);第二個引數如果是true 表示啟動自動重新整理功能

 4)列印的方法:print(XXX x)/println(XXX  xx)

(3):合併流

SequenceInputStream 表示其他輸入流的邏輯串聯(合併流)

 
構造方法 public SequenceInputStream(InputStream s1, InputStream s2)
  複製檔案
 a.txt----->b.txt
 c.txt----->d.txt 
  現在的需求:
  a.txt+b.txt--->c.txt

 StringDemo.java+SystemInDemo.java---->Copy.java

示例程式://封裝原始檔
InputStream in1 = new FileInputStream("StringDemo.java") ;
InputStream in2 = new FileInputStream("SystemInDemo.java") ;

//建立合併流物件
SequenceInputStream sis = new SequenceInputStream(in1, in2) ;

//建立一個位元組緩衝輸入流物件

        BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("Copy.java"));

        //原來怎麼讀寫,現在依然這樣讀寫
byte[] bys = new byte[1024] ;
int len = 0 ;
while((len=sis.read(bys))!=-1) {
bos.write(bys, 0, len);
bos.flush(); //讀圖片檔案的時候
}

//關閉資源
sis.close();
bos.close();

}