我想使用指定的 CharSet 将 CharSequence 写入 OutputStream。基本上,当调用 write(String) 时,使用相同 CharSet 初始化的 Writer 会做什么。
问题是,有很多 CharSequence 需要编写,有些非常大。更复杂的是,所有内容都可能写入多个 OutputStream。我可以很容易地通过使用来实现它(实际上我目前已经用这种方式实现了):
byte[] rawBytes = CharSequence.toString().getBytes(CharSet)
for (OutputStream out : outputTargets) {
out.write(rawBytes);
}
但显然,这里的 String 是一个完全不需要的垃圾对象,byte[] 数组也是如此。我正在寻找一种允许我直接进行编码而无需中间对象的方法。令人惊讶的是,这似乎是不可能的——我在 JRE 中查看接受 CharSequence 的所有地方,在完成任何工作之前它都会迅速转换为字符串。
CharSet 的大多数(全部?)转换工作似乎是在非公共类中完成的,所以我还没有找到任何方法以透明和合法的方式访问其中任何一个。
如何避免垃圾/直接使用 JRE 的 CharSet 编码工具?