天天看點

Bitmap和ImageView顯示下載下傳的圖檔(I/O的了解)

1 利用圖檔的路徑,得到圖檔的位元組數組

 分析:

(1)利用URL得到HttpURLConnection connection這樣便于資源建立起了聯系,且設定connection的屬性值

(2)利用HttpURLConnection connection得到輸入流.即可以這麼想:此時的圖檔已經儲存到了此輸入流inputStream裡

(3)将在輸入流裡的圖檔資料輸出到位元組數組裡面.即byte [] imageData=GetResource.readResource(inputStream).如下

readResource(inputStream)方法如下:

  分析:

(1)沒有方法可以把輸入流裡的資料直接放到位元組數組裡(這句說法不太準确哈),而是要利用ByteArrayOutputStream outputStream

   把在輸入流自己把自己的資料讀(read())到一個位元組數組裡面,即inputStream.read(buffer),然後數組裡面的資料放入

   輸出流ByteArrayOutputStream outputStream裡面,即outputStream.write(buffer,0,len);

(2)待資料全部轉移到輸入流outputStream裡面,此時就可以把輸出流的資料全部轉換為位元組數組,即outputStream.toByteArray();

(3)在此例子就很好展現了輸入流和輸出流的使用.

在輸入流相應的API中都是把輸入流讀取到一個數組中,或者隻讀取一個位元組,或者讀取一行

如FileInputStream類中的方法:

public int read(byte[] b,int off,int len)從此輸入流中将最多 len 個位元組的資料讀入一個位元組數組中

public int read()從此輸入流中讀取一個資料位元組

如在BufferedReader類中的方法:

public String readLine() 讀取一個文本行.傳回值:包含該行内容的字元串

在輸出流相應的API中都把是位元組數組寫入此輸出流,或者隻把數組中的某個位置的資料寫入輸出流

如ByteArrayOutputStream類的方法中:

public void write(byte[] b,int off,int len)将指定位元組數組中從偏移量off開始的len個位元組寫入此位元組數組輸出流

public void write(int b)将指定的位元組寫入此位元組數組輸出流

然後我們可以發現:

(1)可以把輸出流裡的資料轉換為位元組數組

public byte[] toByteArray():建立一個新配置設定的位元組數組。其大小是此輸出流的目前大小,并且緩沖區的有效内容已複制到該數組中。

(2)可以把輸出流裡的資料轉換為字元串

public String toString():将緩沖區的内容轉換為字元串,根據平台的預設字元編碼将位元組轉換成字元。

有了上面的鋪墊就可以更好地了解照片複制:

package cn.io;

//FileInputStream和FileOutputStream實作照片

//注意圖檔不可以用字元流(如FileReader和FileWriter)拷貝,因為它會去查找字元表

//在方式二中使用InputStream中的available()方法建立緩沖區

//這樣操作的好處是不用循環操作,直接先全部暫存在一個數組裡,然後再全部取出存到目的地

2 生成位圖且利用ImageView進行顯示

 byte [] imageData=GetImageResource.getImage(path);

 Bitmap bitmap=BitmapFactory.decodeByteArray(imageData, 0, imageData.length);

 imageView.setImageBitmap(bitmap);

繼續閱讀