在本教程中,我們將借助示例學習Java ByteArrayOutputStream及其方法。
java.io包的ByteArrayOutputStream類可用于寫入輸出數(shù)據(jù)數(shù)組(以字節(jié)為單位)。
它繼承了OutputStream抽象類。

注意:在ByteArrayOutputStream中維護一個存儲數(shù)據(jù)的內(nèi)部字節(jié)數(shù)組。
為了創(chuàng)建字節(jié)數(shù)組輸出流,我們必須首先導入java.io.ByteArrayOutputStream包。導入包后,就可以創(chuàng)建輸出流。
//創(chuàng)建一個默認大小的ByteArrayOutputStream ByteArrayOutputStream out = new ByteArrayOutputStream();
在這里,我們創(chuàng)建了一個輸出流,它將數(shù)據(jù)寫入默認大小為32字節(jié)的字節(jié)數(shù)組中。但是,我們可以更改數(shù)組的默認大小。
//創(chuàng)建具有指定大小的ByteArrayOutputStream ByteArrayOutputStream out = new ByteArrayOutputStream(int size);
在此,size指定數(shù)組的長度。
ByteArrayOutputStream類提供OutputStream類中存在的不同方法的實現(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) -將當前輸出流的全部數(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)建一個輸出流
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)建了一個名為的字節(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]);
}
//返回一個字符串
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)建了一個字節(jié)數(shù)組來存儲toByteArray()方法返回的數(shù)據(jù)。
然后使用for循環(huán)訪問數(shù)組中的每個字節(jié)。在這里,使用類型轉(zhuǎn)換將每個字節(jié)轉(zhuǎn)換為相應的字符。
要關(guān)閉輸出流,我們可以使用close()方法。
但是,close()方法在ByteArrayOutputStream類中無效。即使調(diào)用了close()方法,我們也可以使用此類的方法。
| 方法 | 內(nèi)容描述 |
|---|---|
| size() | 返回輸出流中數(shù)組的大小 |
| flush() | 清除輸出流 |