java – DataOutputStream#writeBytes(String)vs BufferedWriter #write(String)

我想为我的报告创建一个 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只输出字符串中每个字符的低8位并完全忽略高位8位 – 这相当于代码低于128(U 007F及以下)的ASCII字符的UTF-8,但几乎可以肯定除了ASCII以外的任何东西

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

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

相关文章

最近看了一下学习资料,感觉进制转换其实还是挺有意思的,尤...
/*HashSet 基本操作 * --set:元素是无序的,存入和取出顺序不...
/*list 基本操作 * * List a=new List(); * 增 * a.add(inde...
/* * 内部类 * */ 1 class OutClass{ 2 //定义外部类的成员变...
集合的操作Iterator、Collection、Set和HashSet关系Iterator...
接口中常量的修饰关键字:public,static,final(常量)函数...