簡體   English   中英

PrintWriter和DataOutputStream有什么區別?

[英]What is the Difference between PrintWriter and DataOutputStream?

我正在為Android的聊天室應用程序工作。 我讀了不同的教程; 其中一些使用PrintWriter發送數據,其中一些使用DataOutputStream。 這兩者有什么區別? 哪一個更適合聊天應用?

來自java文檔

DataOutputStream允許應用程序以可移植的方式將原始Java數據類型寫入輸出流。 然后,應用程序可以使用數據輸入流來重新讀取數據。

PrintWriter將對象的格式化表示形式打印到文本輸出流。 此類實現PrintStream中的所有打印方法。 它不包含寫入原始字節的方法,程序應使用未編碼的字節流。

在一句話中,區別在於:

OutputStream用於二進制數據。 作家(包括PrintWriter)用於文本數據

PrintWriter將所有內容轉換為Ascii格式。 例如:

PrintWriter pw = new PrintWriter(new File("./test.txt"));        
        for (Integer word: words) {
            pw.println(word);
        }

在這段代碼中,通過調用pw.printin(word) ; 無論單詞的類型是什么(這里是整數),程序都會將其轉換為ASCII格式並存儲它。 因此,當我們想要檢索存儲的數據並再次讀取它時,程序必須執行另一種從文本格式轉換為原始格式的類型! - 在時間效率方面不好! 例如,如果該單詞是一個整數,在將其存儲到文件(現在是文本)之后,程序必須在將要檢索它時將其格式從String更改為整數!

但是, DataOutPutStream使一切變得更加容易,因為它通過保持數據類型將數據存儲為字節。 因此,當我們運行波紋管塊時,程序將整數存儲為字節,當它想要檢索它時,它不需要任何類型的更改。 它存儲為整數並檢索為整數。 所以,它要快得多!

DataOutputStream dos = new DataOutputStream(
            new FileOutputStream(new File("test2.txt")));

    for (Integer word: words) {
        dos.writeUTF(word);   
 }
dos.close();

DataOutputStreamPrintWriter都是PrintWriter中的兩個類。

class DataOutputStream extends FilterOutputStream implements DataOutput {
}

Javadoc

“數據輸出流允許應用程序以可移植的方式將原始Java數據類型寫入輸出流。然后,應用程序可以使用數據輸入流來重新讀取數據。”

 public class PrintWriter extends Writer {
 }

將對象的格式化表示打印到文本輸出流。 此類實現PrintStream中的所有打印方法。 它不包含寫入原始字節的方法,程序應使用未編碼的字節流。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM