更新時(shí)間:2022-07-26 10:55:10 來源:動(dòng)力節(jié)點(diǎn) 瀏覽1292次
以下是 Java OutputStream類 的一些著名子類:
字節(jié)數(shù)組輸出流
文件輸出流
管道輸出流
緩沖輸出流
過濾器輸出流
數(shù)據(jù)輸出流
打印流
對(duì)象輸出流
JavaOutputStream通常連接到某些數(shù)據(jù)目的地 - 如Java IO 概述中所述,如文件、網(wǎng)絡(luò)連接、管道、內(nèi)存緩沖區(qū)等。Java IO 概述文本中也對(duì)此進(jìn)行了更詳細(xì)的解釋。的OutputStream數(shù)據(jù)目的地是所有寫入 的數(shù)據(jù)OutputStream最終結(jié)束的地方。
該write(byte)方法是用來寫一個(gè)單一byte的Java OutputStream。an的write()方法OutputStream接受一個(gè) int,其中包含要寫入的字節(jié)的字節(jié)值。int僅寫入值的第一個(gè)字節(jié)。其余的被忽略。
的子類OutputStream可能有替代write()方法。例如, DataOutputStream允許您使用相應(yīng)的方法等編寫 Java 原語,如 int、long、float、double、booleanwriteBoolean()等writeDouble()。
這是一個(gè)OutputStream write()例子:
OutputStream outputStream = new FileOutputStream("c:\\data\\output-text.txt");
而(有更多數(shù)據(jù)()){
int 數(shù)據(jù) = 獲取更多數(shù)據(jù)();
outputStream.write(數(shù)據(jù));
}
outputStream.close();
個(gè)while循環(huán)。退出while循環(huán)的條件是方法的返回值hasMoreData()。的實(shí)現(xiàn)hasMoreData()沒有顯示,但假設(shè)如果有更多數(shù)據(jù)要寫入,則返回 true,否則返回 false。
在 while 循環(huán)內(nèi),該示例調(diào)用該方法getMoreData()以獲取要寫入 的下一個(gè)數(shù)據(jù)OutputStream,然后將該數(shù)據(jù)寫入OutputStream. while 循環(huán)繼續(xù),直到hasMoreData()返回 false。
注意:為清楚起見,此處跳過了正確的異常處理。要了解有關(guān)正確異常處理的更多信息,請(qǐng)轉(zhuǎn)到Java IO 異常處理。
JavaOutputStream必須使用 write 方法,使您能夠一次將字節(jié)數(shù)組寫入OutputStream。這些寫入方法是:
write(byte[] bytes)
write(byte[] bytes, int offset, int length)
該方法將數(shù)組中的 write(byte[] bytes)所有字節(jié)寫入. byteOutputStream
該write(byte[] bytes, int offset, int length)方法將從字節(jié)數(shù)組的length索引開始的字節(jié)寫入. offsetOutputStream
這兩種方法都返回寫入 的實(shí)際字節(jié)數(shù)OutputStream,如果不是整個(gè)數(shù)組,或者length可以按請(qǐng)求寫入字節(jié)。
OutputStream下面是使用這兩種寫入方法中的第二種將 字節(jié)數(shù)組寫入 Java 的示例:
OutputStream outputStream = new FileOutputStream("/usr/home/jakobjenkov/output.txt");
byte[] sourceBytes = ... // 從某處獲取源字節(jié)。
int bytesWritten = outputStream.write(sourceBytes, 0, sourceBytes.length);
此示例將指示OutputStream嘗試將 sourceBytes數(shù)組中的所有字節(jié)寫入OutputStream. 執(zhí)行此代碼后, bytesWritten變量將包含實(shí)際寫入 OutputStream.
將字節(jié)數(shù)組寫入 Java OutputStream 比一次寫入一個(gè)字節(jié)要快。加速可能非常顯著 - 高達(dá) 10 倍或更多。因此,建議盡可能使用這些write(byte[]) 方法。
您獲得的確切加速取決于運(yùn)行 Java 代碼的計(jì)算機(jī)的底層操作系統(tǒng)和硬件。加速取決于內(nèi)存速度、硬盤速度和緩沖區(qū)大小或網(wǎng)卡速度和緩沖區(qū)大小等問題,具體取決于OutputStream將數(shù)據(jù)發(fā)送到的目的地。
OutputStream您可以通過將其包裝在 Java BufferedOutputStream中 來獲得寫入 Java 的字節(jié)的透明緩沖。所有寫入 的字節(jié)BufferedOutputStream 都將首先緩沖在BufferedOutputStream. 當(dāng)緩沖區(qū)已滿時(shí),緩沖區(qū)會(huì)OutputStream立即全部刷新到底層。OutputStream這是將 Java 包裝在 a 中的示例BufferedOutputStream:
整數(shù)緩沖區(qū)大小 = 8 * 1024;
輸出流輸出流 =
新的緩沖輸出流(
new FileOutputStream("c:\\data\\output-file.txt"), bufferSize);
您可以BufferedOutputStream在我的BufferedOutputStream 教程中了解更多信息。
JavaOutputStream的flush()方法將寫入的所有數(shù)據(jù)刷新OutputStream 到底層數(shù)據(jù)目標(biāo)。例如,如果OutputStream是 aFileOutputStream 那么寫入 的字節(jié)FileOutputStream可能還沒有完全寫入磁盤。即使您的 Java 代碼已將數(shù)據(jù)寫入FileOutputStream. 通過調(diào)用flush(),您可以確保任何緩沖的數(shù)據(jù)都將被刷新(寫入)到磁盤(或網(wǎng)絡(luò),或任何其他目的地OutputStream)。OutputStream下面是通過調(diào)用Java 方法刷新寫入 Java 的數(shù)據(jù)的示例flush():
outputStream.flush();
將數(shù)據(jù)寫入 Java 后OutputStream,您應(yīng)該關(guān)閉它。你 OutputStream通過調(diào)用它的close()方法來關(guān)閉它。這是關(guān)閉 Java 的示例OutputStream:
OutputStream outputStream = new FileOutputStream("c:\\data\\output-text.txt");
而(有更多數(shù)據(jù)()){
int 數(shù)據(jù) = 獲取更多數(shù)據(jù)();
outputStream.write(數(shù)據(jù));
}
outputStream.close();
hasMoreData()和 的具體實(shí)現(xiàn)getMoreData()被省略了,但它們對(duì)于理解這個(gè)例子的原理并不是非常重要。重要的是,一旦循環(huán)結(jié)束while,并且您將數(shù)據(jù)寫入. OutputStreamclose()OutputStream
上面的例子雖然不是完全健壯的。如果write()方法拋出異常,該close()方法將永遠(yuǎn)不會(huì)被調(diào)用。該異常將使程序退出上述代碼所在的任何方法。
相反,您應(yīng)該使用 Java try with resources構(gòu)造來關(guān)閉OutputStream. 下面是一個(gè)OutputStream使用 try-with-resources 構(gòu)造關(guān)閉 Java 的示例:
嘗試(OutputStream outputStream = new FileOutputStream("c:\\data\\output-text.txt")) {
而(有更多數(shù)據(jù)()){
int 數(shù)據(jù) = 獲取更多數(shù)據(jù)();
outputStream.write(數(shù)據(jù));
}
}
try退出塊后, 會(huì)自動(dòng)調(diào)用的close()方法,因?yàn)?是 在塊的括號(hào)內(nèi)聲明的 。即使從塊內(nèi)部拋出異常, 在異常傳播到調(diào)用堆棧之前仍會(huì)調(diào)用該方法。 OutputStreamOutputStreamtrytryclose()
JavaOutputStream是基于字節(jié)的流。您可以使用Java OutputStreamWriter類將 a 轉(zhuǎn)換OutputStream為基于字符的字符。這是將 Java 轉(zhuǎn)換為using 的示例: WriterOutputStreamWriterOutputStreamWriter
OutputStream outputStream = new FileOutputStream("c:\\data\\output.txt");
編寫器 outputStreamWriter = new OutputStreamWriter(outputStream);
outputStreamWriter.write("Hello World");
以上就是關(guān)于“Java輸出流介紹”,大家如果對(duì)此比較感興趣,想了解更多相關(guān)知識(shí),不妨來關(guān)注一下動(dòng)力節(jié)點(diǎn)的Java基礎(chǔ)教程,里面有更豐富的知識(shí)等著大家去學(xué)習(xí),希望對(duì)大家能夠有所幫助。
相關(guān)閱讀
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
有基礎(chǔ) 直達(dá)就業(yè)
業(yè)余時(shí)間 高薪轉(zhuǎn)行
工作1~3年,加薪神器
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)
初級(jí) 202925
初級(jí) 203221
初級(jí) 202629
初級(jí) 203743