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