在Java中将字符串写入输出流的最佳方法

5

我有一个从HttpURLConnection返回的OutputStream实例。我需要将UTF-8字符串写入流中。

我有两种方法:

  1. Use OutputStream itself

    // write String
    os.write("some utf8 text".getBytes(Charsets.UTF_8));
    
  2. Use OutputStreamWriter wrapper

    // BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(os, CharsetUtils.UTF_8));
    
    OutputStreamWriter osw = new OutputStreamWriter(os, CharsetUtils.UTF_8);
    osw.write("some utf8 text");
    

问题: 为什么我们应该使用OutputStreamWriter而不是OutputStream来写入字符串?

谢谢!


1
由于大多数情况下,您希望将许多字符串(可能使用PrintWriter包装OuputStreamWriter来使用其他数据类型)写入同一流中,并且不希望每次都重复编码。 - JB Nizet
1个回答

6
问题:为什么我们应该使用OutputStreamWriter而不是OutputStream来编写String?
只需在OutputStreamWriter的构造函数中定义编码一次,而不是每次我们想将String编码为UTF-8时都要指定getBytes(Charsets.UTF_8),这就是原因。
此外,OutputStreamWriter提供了许多方便的写String方法,例如write(String),write(String,int,int),append(CharSequence)和append(CharSequence,int,int),而在OutputStream中则没有这些方法。

谢谢。这是一个原因。但是就性能而言,它们是一样的吗? - LHA
2
在性能之前,你应该始终考虑可维护性。不过,我从未检查过,但如果我是你,我不会担心它,只需相信Sun/Oracle的工程师们 :-) - Nicolas Filotto
1
OutputStreamWriter是为此目的而设计的,因此我认为它应该被优化得足够好。 - Nicolas Filotto

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接