Java:String.getBytes(字符集)与。 Charset.encode(String) 与 OutputStream 一起使用
Java: String.getBytes(Charset) Vs. Charset.encode(String) for use with OutputStream
我的算法有两个输入:
- 1 将被编码的 utf8 String 对象
- 1 个字符集对象,指示我需要将字符串编码成什么
最终,returned 的结果将被放入一个 OutputStream,一个可能发生多次但至少一次的动作。在这种情况下没有发生多线程。
我找到了两个解决方案:
- 对给定的字符串调用 getBytes(Charset) 并提供给定的字符集。这将return一个字节[]
- 在给定的字符集上调用 encode(String) 并提供给定的字符串。这将 return 一个 ByteBuffer。
深入研究这些方法背后的代码会发现每个底层算法的复杂设计。我不能说我明白如何在这两个选项之间做出选择。
- 调用这两种方法是否存在显着的性能差异?
- 将结果放入 OutputStream 是否有显着的性能差异?
- 足迹有显着差异吗?
哪种解决方案通常是更好的选择?
在这两种情况下,都会动态构建一个 byte[]
来对字符串进行编码。一种更有效的方法是将其直接写入 OutputStream。例如
OutputStreamWriter osw = new OutputStreamWriter(out, StandardCharsets.UTF_8);
// look Mum, no byte[] needed
osw.write(text);
如果您需要二进制格式,另一种选择是使用 DataOutputStream.writeUTF。
我的算法有两个输入:
- 1 将被编码的 utf8 String 对象
- 1 个字符集对象,指示我需要将字符串编码成什么
最终,returned 的结果将被放入一个 OutputStream,一个可能发生多次但至少一次的动作。在这种情况下没有发生多线程。
我找到了两个解决方案:
- 对给定的字符串调用 getBytes(Charset) 并提供给定的字符集。这将return一个字节[]
- 在给定的字符集上调用 encode(String) 并提供给定的字符串。这将 return 一个 ByteBuffer。
深入研究这些方法背后的代码会发现每个底层算法的复杂设计。我不能说我明白如何在这两个选项之间做出选择。
- 调用这两种方法是否存在显着的性能差异?
- 将结果放入 OutputStream 是否有显着的性能差异?
- 足迹有显着差异吗?
哪种解决方案通常是更好的选择?
在这两种情况下,都会动态构建一个 byte[]
来对字符串进行编码。一种更有效的方法是将其直接写入 OutputStream。例如
OutputStreamWriter osw = new OutputStreamWriter(out, StandardCharsets.UTF_8);
// look Mum, no byte[] needed
osw.write(text);
如果您需要二进制格式,另一种选择是使用 DataOutputStream.writeUTF。