为什么java.io.RandomAccessFile.writeChars(String s)将空格字符(“ \ u0020”)视为1个字节?

时间:2018-07-03 10:19:39

标签: java character-encoding

我了解此方法由接口writeChars中的DataOutput指定,并且Javadoc声明:

  

将字符串s中的每个字符依次写入每个字符两个字节

我无法理解,而且我一直在研究SO上的许多其他编码问题,就是如果writeChars显式地每个字符写入2个字节,并且不区分任何字符(因此我认为那就不再是Java运行时使用什么编码的问题了,但是任何文件系统都将一个字符视为2个字节),然后为什么将SPACE字符视为一个字节?

我可能缺少了一个非常简单的东西,这里有许多关于编码的问题很有用,但是我似乎无法将这些问题应用于我的问题。

Edit *我本来要提供代码,但是在运行一个测试一组输入(而不是整个输入文件)并基于标记的答案后,现在我得到了预期的输出,显然我错了。

1 个答案:

答案 0 :(得分:2)

我无法复制您描述的行为。

public class Test {
    public static void main(String[] args) throws Exception {
        try (RandomAccessFile raf = new RandomAccessFile("test", "rw")) {
            raf.writeChars("\u0020");
        }
    }
}

这将在当前目录中创建一个名为“ test”的文件,其中“ ls -l”告诉我两个字节长。