在本教程中,我們將借助示例學(xué)習(xí)Java BufferedOutputStream及其方法。
java.io包的BufferedOutputStream類與其他輸出流一起使用,以更有效地寫入數(shù)據(jù)(以字節(jié)為單位)。
它繼承了OutputStream抽象類。
BufferedOutputStream維護(hù)一個8192字節(jié)的內(nèi)部緩沖區(qū)。
在寫操作期間,字節(jié)被寫入內(nèi)部緩沖區(qū)而不是磁盤。 一旦緩沖區(qū)被填充或流關(guān)閉,整個緩沖區(qū)將被寫入磁盤。
因此,減少了與磁盤的通信次數(shù)。這就是為什么使用BufferedOutputStream寫入字節(jié)更快的原因。
為了創(chuàng)建一個BufferedOutputStream,我們必須首先導(dǎo)入java.io.BufferedOutputStream包。導(dǎo)入包后,就可以創(chuàng)建輸出流了。
//創(chuàng)建一個FileOutputStream FileOutputStream file = new FileOutputStream(String path); //創(chuàng)建一個BufferedOutputStream BufferedOutputStream buffer = new BufferOutputStream(file);
在上面的示例中,我們創(chuàng)建了一個名為buffer的BufferdOutputStream,并使用名為file的FileOutputStream。
在此,內(nèi)部緩沖區(qū)的默認(rèn)大小為8192字節(jié)。但是,我們也可以指定內(nèi)部緩沖區(qū)的大小。
//創(chuàng)建一個具有指定大小的內(nèi)部緩沖區(qū)的BufferedOutputStream BufferedOutputStream buffer = new BufferOutputStream(file, int size);
這buffer將有助于更快地將字節(jié)寫入文件。
BufferedOutputStream類為OutputStream類中的不同方法提供了實現(xiàn)。
write() - 將單個字節(jié)寫入輸出流的內(nèi)部緩沖區(qū)
write(byte[] array) - 將指定數(shù)組中的字節(jié)寫入輸出流
write(byte[] arr, int start, int length)- 從位置start開始將等于length的字節(jié)數(shù)寫入數(shù)組的輸出流
import java.io.FileOutputStream; import java.io.BufferedOutputStream; public class Main { public static void main(String[] args) { String data = "This is a line of text inside the file"; try { //創(chuàng)建一個FileOutputStream FileOutputStream file = new FileOutputStream("output.txt"); //創(chuàng)建一個BufferedOutputStream BufferedOutputStream output = new BufferedOutputStream(file); byte[] array = data.getBytes(); //將數(shù)據(jù)寫入輸出流 output.write(array); output.close(); } catch (Exception e) { e.getStackTrace(); } } }
在上面的示例中,我們創(chuàng)建了一個名為output的緩沖輸出流以及FileOutputStream。輸出流與文件output.txt鏈接。
FileOutputStream file = new FileOutputStream("output.txt"); BufferedOutputStream output = new BufferedOutputStream(file);
要將數(shù)據(jù)寫入文件,我們使用了write()方法。
在這里,當(dāng)我們運行程序時,output.txt文件將寫入以下內(nèi)容。
This is a line of text inside the file.
注意:程序中使用getBytes()方法將字符串轉(zhuǎn)換為字節(jié)數(shù)組。
要清除內(nèi)部緩沖區(qū),我們可以使用flush()方法。此方法強制輸出流將緩沖區(qū)中存在的所有數(shù)據(jù)寫入目標(biāo)文件。例如,
import java.io.FileOutputStream; import java.io.BufferedOutputStream; public class Main { public static void main(String[] args) { String data = "This is a demo of the flush method"; try { //創(chuàng)建一個FileOutputStream FileOutputStream file = new FileOutputStream("flush.txt"); //創(chuàng)建一個BufferedOutputStream BufferedOutputStream buffer = new BufferedOutputStream(file); //將數(shù)據(jù)寫入輸出流 buffer.write(data.getBytes()); //將數(shù)據(jù)推入到目標(biāo) buffer.flush(); System.out.println("數(shù)據(jù)被推入到文件中。"); buffer.close(); } catch(Exception e) { e.getStackTrace(); } } }
輸出結(jié)果
數(shù)據(jù)被推入到文件中。
當(dāng)我們運行程序時,文件flush.txt填充了由字符串?dāng)?shù)據(jù)表示的文本。
要關(guān)閉緩沖的輸出流,我們可以使用close()方法。調(diào)用該方法后,我們將無法使用輸出流寫入數(shù)據(jù)。