2011-02-12 101 views
2

我想知道,當我使用PrintWriter寫入文件時。它將用ASCII碼以文件或二進制格式寫入? 謝謝。使用PrintWriter將ASCII代碼寫入文件

+2

什麼是ASCII和二進制格式之間的區別,你期待什麼呢?所有都是磁盤文件中的二進制文件。 – Thomson 2011-02-12 08:17:09

回答

0

它會輸出字符數據。但是這可能超出ASCII集,它只保留128個字符,其中前32個是特殊控制字符。

3

Writer寫入字符,因此,在該文件中最終二進制數據依賴於編碼。

例如,如果你有一個16位編碼如UTF-16則會有每個ASCII字節一個額外的零字節:

public class TestWriter 
{ 
    public static void main(String[] args) 
    throws UnsupportedEncodingException 
    { 
     final ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
     final OutputStreamWriter out = new OutputStreamWriter(baos, "UTF-16"); 
     final PrintWriter writer = new PrintWriter(out); 

     writer.printf("abc"); 
     writer.close(); 

     for (final byte b : baos.toByteArray()) 
     { 
      System.out.printf("0x%02x ", b); 
     } 
     System.out.printf("\n"); 
    } 
} 

打印0xfe 0xff 0x00 0x61 0x00 0x62 0x00 0x63

0

您可以將大多數ASCII字母寫爲文本或二進制文件,並且您將獲得大多數字符編碼的相同結果。兩個ASCII字符在文本文件中有特殊含義,是換行符\ n並且回車符\ r。這意味着如果你有文本文件,並且你想寫一個包含這些字符的字符串,讀者可能很難或不可能區分文本文件中的行尾,例如println()和行結尾放入一個字符串,例如打印( 「1個\ N2 \ N3 \ n」)