Java:String.getBytes(Charset)Vs. Charset.encode(String)与OutputStream一起使用

时间:2015-10-05 13:03:54

标签: java string encoding character-encoding bytebuffer

我的情况是我的算法有2个输入:

  • 1 utf8将被编码的字符串对象
  • 1个Charset对象,表示我需要将字符串编码为

最后,返回的结果将被放入OutputStream中,这可能会多次发生,但至少会发生一次。在这种情况下没有发生多线程。

我找到了两个解决方案:

  1. 在给定的String上调用getBytes(Charset)并提供给定的Charset。这将返回一个byte []
  2. 在给定的Charset上调用encode(String)并提供给定的String。这将返回ByteBuffer。
  3. 深入研究这些方法背后的代码,展示了每种基础算法的复杂设计。我不能说我理解如何在这两个选项之间做出选择。

    1. 调用这两种方法是否存在显着的性能差异?
    2. 将结果放入OutputStream会有明显的性能差异吗?
    3. 足迹是否存在显着差异?
    4. 哪种解决方案通常是更好的选择?

1 个答案:

答案 0 :(得分:4)

在这两种情况下,动态构建byte[]以对字符串进行编码。更有效的方法是将其直接写入OutputStream。 e.g。

OutputStreamWriter osw = new OutputStreamWriter(out, StandardCharsets.UTF_8);
// look Mum, no byte[] needed
osw.write(text);

如果您需要二进制格式,则可以使用DataOutputStream.writeUTF。