java byte.tostring_Java:没有toString的StringBuffer到byte []

正如许多人已经建议的那样,你可以使用CharBuffer类,但是分配一个新的CharBuffer只会让你的问题变得更糟.

相反,您可以直接将StringBuilder包装在CharBuffer中,因为StringBuilder实现了CharSequence:

Charset charset = StandardCharsets.UTF_8;

CharsetEncoder encoder = charset.newEncoder();

// No allocation performed, just wraps the StringBuilder.

CharBuffer buffer = CharBuffer.wrap(stringBuilder);

ByteBuffer bytes = encoder.encode(buffer);

编辑:Duarte正确指出CharsetEncoder.encode方法可能返回一个缓冲区,其后备数组大于实际数据意义,其容量大于其限制.有必要从ByteBuffer本身读取,或从ByteBuffer中读取保证大小合适的字节数组.在后一种情况下,没有避免在内存中有两个字节副本,尽管很简单:

ByteBuffer byteBuffer = encoder.encode(buffer);

byte[] array;

int arrayLen = byteBuffer.limit();

if (arrayLen == byteBuffer.capacity()) {

array = byteBuffer.array();

} else {

// This will place two copies of the byte sequence in memory,

// until byteBuffer gets garbage-collected (which should happen

// pretty quickly once the reference to it is null'd).

array = new byte[arrayLen];

byteBuffer.get(array);

}

byteBuffer = null;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值