補遺(2014年1月23日21:17:53)
<a target="_blank" href="http://blog.csdn.net/lfdfhl/article/details/8195375">http://blog.csdn.net/lfdfhl/article/details/8195375</a>
注意輸出流的了解:它都是把資料寫到輸出流裡面.
參見該部落格的一些說明.
既然把資料寫在了輸出流裡面了.那麼它一定是有用的!那麼它不可能一直呆在輸出流裡面,這樣的話一點實際意義都沒有了.
至于在輸出流裡的資料怎麼用,用在哪裡.當然要看實際情況了.
無非是兩種:
1 第一種情況.輸出流和硬碟打交道.輸出流和硬碟或者SD卡連在一起的.比如例子中的複制照片的.
即代碼fos=new FileOutputStream("F:\\2.JPG");
然後把位元組數組裡面的資料寫到了輸出流即代碼 fos.write(temp1, 0, length);
因為這個輸出流直接聯系的是以資料直接就到了硬碟了.
2 第二種情況.輸出流和記憶體打交道.
比如例子中關于Bitmap顯示網絡圖檔的例子.
這個時候在記憶體中要使用輸入流的資料.于是把輸入流的資料寫入到了輸出流
準确地來說是一個ByteArrayOutputStream位元組數組輸出流.
ByteArrayOutputStream的目的就是在記憶體中建立緩沖區,也就是把資料都儲存在了記憶體中的ByteArrayOutputStream.
然後我們可以用outputStream.toByteArray()把資料儲存到了記憶體中的位元組數組中.
我們看一下OutputStream的子類 ByteArrayOutputStream, FileOutputStream, FilterOutputStream, ObjectOutputStream,
OutputStream, PipedOutputStream
其實常用的就是前兩個ByteArrayOutputStream, FileOutputStream 分别對應于記憶體和硬碟的操作.
在資料:http://blog.sina.com.cn/s/blog_4c1c2d43010007sg.html中提到:
OutputStream的類決定了輸出所要去往的目标,這個目标包括I.位元組數組 II.檔案 III.管道
我覺得這個說法還是挺形象和準确的.