Java:String.getBytes(Charset)与Charset.encode(String)用于OutputStream
我的算法有两个输入:Java:String.getBytes(Charset)与Charset.encode(String)用于OutputStream,java,string,encoding,character-encoding,bytebuffer,Java,String,Encoding,Character Encoding,Bytebuffer,我的算法有两个输入: 1个将被编码的utf8字符串对象 1个字符集对象,指示需要将字符串编码到的内容 最后,返回的结果将被放入OutputStream,这是一个可能发生多次但至少发生一次的操作。在这个场景中没有多线程发生 我找到了两种解决办法: 对给定字符串调用getBytes(字符集)并提供给定的字符集。这将返回一个字节[] 在给定的字符集上调用encode(String)并提供给定的字符串。这将返回一个ByteBuffer 深入研究这些方法背后的代码显示了每个底层算法的复杂设计。我不能说
- 1个将被编码的utf8字符串对象
- 1个字符集对象,指示需要将字符串编码到的内容
哪种解决方案通常是更好的选择?在这两种情况下,动态构建
字节[]
来编码字符串。一种更有效的方法是将其直接写入OutputStream。e、 g
OutputStreamWriter osw = new OutputStreamWriter(out, StandardCharsets.UTF_8);
// look Mum, no byte[] needed
osw.write(text);
如果您需要二进制格式,另一种选择是使用DataOutputStream.writeUTF。很可能不使用,最可能不使用,最可能不使用,并使用您觉得合适的格式。像这样的微优化是浪费时间。@Kayaman我喜欢“微优化”这个词,因为很多人都喜欢它的想法。@Kayaman我可以理解你是否正在开发一个需要在微秒级进行优化的应用程序。但对于那些使用java编写此类程序的人,我只能说“祝你好运”:@nafas这一切都取决于他们的技能。例如,下面的Lawrey先生使用Java创建了几个性能关键型库。除了,
DataOutputStream.writeUTF
写入中断的输出(“修改的UTF”)如果您使用非BMP字符。@ChrisJester Young DataOutputStream.writeUTF只有在使用DataInputStream.readUTF esp时才真正有用,因为它在开头添加了两个字节作为长度。例如,它不会损坏字符。