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

bufferedwriter, dataoutputstream, java, java-io, string

Solution

If you're writing out text then you should use a `Writer`, which handles the conversion from unicode characters (Java's internal representation of strings) into an appropriate character encoding such as UTF-8. `DataOutputStream.writeBytes` simply outputs the low-order eight bits of each `char` in the string and ignores the high-order eight bits entirely - this is equivalent to UTF-8 for ASCII characters with codes below 128 (U+007F and below) but almost certainly wrong for anything beyond ASCII.

Rather than a FileWriter, you should use an OutputStreamWriter so you can select a specific encoding (FileWriter always uses the platform's default encoding, which varies from platform to platform):

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

Problem

I would like to create a HTML file for my report. The content in the report can be created either by using `BufferedWriter#write(String)` ``` File f = new File("source.htm"); BufferedWriter bw = new BufferedWriter(new FileWriter(f)); bw.write("Content"); ``` or by using `DataOutputStream#writeBytes(String)` ``` File f = new File("source.htm"); DataOutputStream dosReport = new DataOutputStream(new FileOutputStream(f)); dosReport.wrtiteBytes("Content"); ``` Is one of them better than the other? Why is it so?

Original source

Related problems