java - DataOutputStream#writeBytes(String) 与 BufferedWriter#write(String)

标签 java string java-io bufferedwriter dataoutputstream

我想为我的报告创建一个 HTML 文件。报告中的内容可以通过使用 BufferedWriter#write(String)

创建
File f = new File("source.htm");
BufferedWriter bw = new BufferedWriter(new FileWriter(f));
bw.write("Content");

或使用 DataOutputStream#writeBytes(String)

File f = new File("source.htm");
DataOutputStream dosReport = new DataOutputStream(new FileOutputStream(f)); 
dosReport.wrtiteBytes("Content");

其中一个比另一个更好吗?为什么会这样?

最佳答案

如果您正在写出文本,那么您应该使用 Writer,它处理从 unicode 字符(Java 的字符串内部表示)到适当的字符编码(例如 UTF-8)的转换。 DataOutputStream.writeBytes 仅输出字符串中每个 char 的低八位,而完全忽略高八位 - 这相当于 ASCII 的 UTF-8代码低于 128(U+007F 及以下)的字符,但对于 ASCII 以外的任何内容几乎肯定是错误的。

您应该使用 OutputStreamWriter 而不是 FileWriter,这样您就可以选择特定的编码(FileWriter 始终使用平台的默认编码,该编码因平台而异):

File f = new File("source.htm");
BufferedWriter bw = new BufferedWriter(
  new OutputStreamWriter(new FileOutputStream(f), "UTF-8"));
bw.write("Content");

关于java - DataOutputStream#writeBytes(String) 与 BufferedWriter#write(String),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20351998/

相关文章:

java - Swing JPanel 切换超出范围

java - 如何在 Bluemix 中 sftp 一个 zip 文件,存储它并使用 Java 的 zip api 读取它?

java - 如何在 IntegrationFlow 组件上编写单元测试?

string - 按 J 中的长度对字符串中的单词进行排序

C# - 两个大字符串数组的模糊比较

java - 无法从 main 方法输出值

java - 如何确保doLast甚至任务被跳过

python - 在 Python 中检查字符串是大写、小写还是混合大小写

java - Java 中 File.exists() 的替代方案

java - 线程 "main"java.io.FileNotFoundException : (The system cannot find the path specified) 中出现异常