在本教程中,我們將借助示例學(xué)習(xí)Java ByteArrayOutputStream及其方法。
java.io包的ByteArrayOutputStream類可用于寫入輸出數(shù)據(jù)數(shù)組(以字節(jié)為單位)。
它繼承了OutputStream抽象類。
注意:在ByteArrayOutputStream中維護(hù)一個(gè)存儲(chǔ)數(shù)據(jù)的內(nèi)部字節(jié)數(shù)組。
為了創(chuàng)建字節(jié)數(shù)組輸出流,我們必須首先導(dǎo)入java.io.ByteArrayOutputStream包。導(dǎo)入包后,就可以創(chuàng)建輸出流。
//創(chuàng)建一個(gè)默認(rèn)大小的ByteArrayOutputStream ByteArrayOutputStream out = new ByteArrayOutputStream();
在這里,我們創(chuàng)建了一個(gè)輸出流,它將數(shù)據(jù)寫入默認(rèn)大小為32字節(jié)的字節(jié)數(shù)組中。但是,我們可以更改數(shù)組的默認(rèn)大小。
//創(chuàng)建具有指定大小的ByteArrayOutputStream ByteArrayOutputStream out = new ByteArrayOutputStream(int size);
在此,size指定數(shù)組的長(zhǎng)度。
ByteArrayOutputStream類提供OutputStream類中存在的不同方法的實(shí)現(xiàn)。
write(int byte) - 將指定的字節(jié)寫入輸出流
write(byte[] array) - 將指定數(shù)組中的字節(jié)寫入輸出流
write(byte[] arr, int start, int length)- 從位置start開始將等于length的字節(jié)數(shù)寫入數(shù)組的輸出流
writeTo(ByteArrayOutputStream out1) -將當(dāng)前輸出流的全部數(shù)據(jù)寫入指定的輸出流
import java.io.ByteArrayOutputStream; class Main { public static void main(String[] args) { String data = "This is a line of text inside the string."; try { //創(chuàng)建一個(gè)輸出流 ByteArrayOutputStream out = new ByteArrayOutputStream(); byte[] array = data.getBytes(); //將數(shù)據(jù)寫入輸出流 out.write(array); //以字符串格式從輸出流檢索數(shù)據(jù) String streamData = out.toString(); System.out.println("輸出流: " + streamData); out.close(); } catch(Exception e) { e.getStackTrace(); } } }
輸出結(jié)果
輸出流: This is a line of text inside the string.
在上面的示例中,我們創(chuàng)建了一個(gè)名為的字節(jié)數(shù)組輸出流output。
ByteArrayOutputStream output = new ByteArrayOutputStream();
要將數(shù)據(jù)寫入輸出流,我們使用了write()方法。
注意:程序中使用的getBytes()方法將字符串轉(zhuǎn)換為字節(jié)數(shù)組。
toByteArray() - 返回輸出流中存在的數(shù)組
toString() - 以字符串形式返回輸出流的全部數(shù)據(jù)
例如,
import java.io.ByteArrayOutputStream; class Main { public static void main(String[] args) { String data = "This is data."; try { //創(chuàng)建輸出流 ByteArrayOutputStream out = new ByteArrayOutputStream(); //將數(shù)據(jù)寫入輸出流 out.write(data.getBytes()); //返回字節(jié)數(shù)組 byte[] byteData = out.toByteArray(); System.out.print("使用toByteArray()的數(shù)據(jù): "); for(int i=0; i<byteData.length; i++) { System.out.print((char)byteData[i]); } //返回一個(gè)字符串 String stringData = out.toString(); System.out.println("\n使用toString()的數(shù)據(jù): " + stringData); out.close(); } catch(Exception e) { e.getStackTrace(); } } }
輸出結(jié)果
使用toByteArray()的數(shù)據(jù): This is data. 使用toString()的數(shù)據(jù): This is data.
在上面的示例中,我們創(chuàng)建了一個(gè)字節(jié)數(shù)組來存儲(chǔ)toByteArray()方法返回的數(shù)據(jù)。
然后使用for循環(huán)訪問數(shù)組中的每個(gè)字節(jié)。在這里,使用類型轉(zhuǎn)換將每個(gè)字節(jié)轉(zhuǎn)換為相應(yīng)的字符。
要關(guān)閉輸出流,我們可以使用close()方法。
但是,close()方法在ByteArrayOutputStream類中無效。即使調(diào)用了close()方法,我們也可以使用此類的方法。
方法 | 內(nèi)容描述 |
---|---|
size() | 返回輸出流中數(shù)組的大小 |
flush() | 清除輸出流 |