Java將文件轉(zhuǎn)為字節(jié)數(shù)組
關鍵字:文件,文件流,字節(jié)流,字節(jié)數(shù)組,二進制
摘要:最近工作中碰到的需求是,利用http傳輸二進制數(shù)據(jù)到服務器對應接口,需要傳輸userId, file(加密后)等一系列混合后的二進制數(shù)據(jù)。本文旨在記錄自己在使用Java將文件轉(zhuǎn)為字節(jié)數(shù)組的一些知識理解與匯總。
FileInputStream
利用FileInputStream讀取文件
FileInputStream是InputStream的子類,用于從文件中讀取信息,構造器接收一個File類型或表示文件路徑的String類型。
1
2
|
File file = new File( "filePath" ); FileInputStream fis = new FileInputStream(file); |
ByteArrayOutputStream
利用ByteArrayOutputStream將FileInputStream中的文件數(shù)據(jù)讀出來
ByteArrayOutputStream是用來在內(nèi)存中創(chuàng)建緩沖區(qū),所有送往“流”的數(shù)據(jù)都要放置在此緩沖區(qū)中。
1
2
3
4
5
6
|
ByteArrayOutputStream bos = new ByteArrayOutputStream(fis); byte [] b = new byte [ 1024 ]; int len = - 1 ; while ((len = fis.read(b)) != - 1 ) { bos.write(b, 0 , len); } |
注意:ByteArrayOutputStream的write方法有三種重載形式:
write(int b)
寫入指定字節(jié)
write(byte[] b)
寫入整個字節(jié)數(shù)組b
write(byte[] b, int off, int len)
寫入字節(jié)數(shù)組b,從b的第off下標開始,寫入len個字節(jié)。
這里沒有使用第二中,而是使用了第三種,在代碼中每次獲取讀入緩沖區(qū)b中的數(shù)量,一般為1024(因為定義b的時候顯示指定了長度),只有當讀到結尾的時候,可能不夠1024個字節(jié)了,也會讀取實際的讀取字節(jié)數(shù),但是在寫入緩沖區(qū)的時候,如果不指定寫入的數(shù)量,即不指定len,那么就會將整個b全部寫入,即使b中只有一部分內(nèi)容,但是依然會寫入1024個字節(jié)。這將導致使用toByteArray時,得到的字節(jié)數(shù)組不是實際長度!
這樣就將文件流從InputStream中寫入了ByteArrayOutputStream中。
利用ByteArrayOutputStream的toByteArray()方法得到文件的字節(jié)數(shù)組。
1
|
byte [] fileByte = bos.toByteArray(); |
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
原文鏈接:http://www.cnblogs.com/shiyu404/p/6210562.html