使用PrintWriter将ASCII代码写入文件

问题描述:

我想知道,当我使用PrintWriter写入文件时。它将用ASCII码以文件或二进制格式写入? 谢谢。使用PrintWriter将ASCII代码写入文件

+2

什么是ASCII和二进制格式之间的区别,你期待什么呢?所有都是磁盘文件中的二进制文件。 – Thomson 2011-02-12 08:17:09

它会输出字符数据。但是这可能超出ASCII集,它只保留128个字符,其中前32个是特殊控制字符。

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

您可以将大多数ASCII字母写为文本或二进制文件,并且您将获得大多数字符编码的相同结果。两个ASCII字符在文本文件中有特殊含义,是换行符\ n并且回车符\ r。这意味着如果你有文本文件,并且你想写一个包含这些字符的字符串,读者可能很难或不可能区分文本文件中的行尾,例如println()和行结尾放入一个字符串,例如打印( “1个\ N2 \ N3 \ n”)