1

为什么下面的代码

import java.io.DataOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class Test {
    public static void main(String[] args) throws IOException {
         DataOutputStream out = new DataOutputStream( new FileOutputStream("plik.txt")); 
         String test = new String("test");
         out.writeUTF(test);
         out.close(); 
    }

}

在文件开头生成带有“null”和eot字符的文件,然后是“test”?我希望它会生成只有“测试”的文件,而不需要额外的东西。

4

1 回答 1

3

来自 DataOutputStream.writeUTF() 的 Javadoc:

首先,两个字节被写入输出流,就好像通过 writeShort 方法给出了后面的字节数。这个值是实际写出的字节数,而不是字符串的长度。在长度之后,使用修改后的 UTF-8 字符编码按顺序输出字符串的每个字符。[...]

所以它不是 2 个字符,而只是 2 个字节。

DataOutputStream 的目的是:

数据输出流允许应用程序以可移植的方式将原始 Java 数据类型写入输出流。然后,应用程序可以使用数据输入流来读回数据。

另请注意,建议使用 NIO2 API 和自动资源管理。并且不要用字符串包装字符串。写入文件系统时,还要为流使用缓冲区。

try (DataOutputStream out = new DataOutputStream(new BufferedOutputStream(Files.newOutputStream(Paths.get("plik.txt")))){ 
         String test = "test";
         out.writeUTF(test);
}

如果您只想将一些文本以 UTF-8 格式写入文件,请使用以下代码:

try (PrintWriter pw = new PrintWriter(Files.newBufferedWriter(Paths.get("plik.txt"), Charset.forName("UTF-8"))){ 
         String test = "test";
         pw.print(test);
}
于 2013-04-13T18:38:55.027 回答