【问题标题】:Using a PrintWriter to write ASCII codes to a file使用 PrintWriter 将 ASCII 代码写入文件
【发布时间】:2011-02-12 08:07:56
【问题描述】:

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

【问题讨论】:

  • 你期望ASCII和二进制格式有什么区别?都是磁盘文件中的二进制文件。
  • printWriter 不是面向字节的 IO。我认为它属于缓冲的面向行的 IO 类。

标签: java ascii printwriter


【解决方案1】:

Writer 写入字符,因此最终在文件中的二进制数据取决于编码。

例如,如果您使用 UTF-16 等 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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-10-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-22
        相关资源
        最近更新 更多