在Java中将StringBuffer转换为字节数组

34

如何在Java中将StringBuffer转换为字节数组?


9
你可以直接使用String.valueOf(stringBuffer).getBytes()吗? - Greg Giacovelli
9
请确保在使用getBytes时指定编码方式... "使用平台默认的字符集将该字符串编码为一系列字节..." 这是一个比较荒谬的地方,他们没有选择一个通用的默认值。 - user166390
2个回答

61

一个更好的替代方法是 stringBuffer.toString().getBytes()

更好的原因是String.valueOf(stringBuffer)实际上调用了stringBuffer.toString()。直接调用stringBuffer.toString().getBytes()将为您节省一个函数调用和与null的相等比较。

这是java.lang.StringvalueOf方法的实现:

public static String valueOf(Object obj) {

        return (obj == null) ? "null" : obj.toString();

}

35

我说我们有一个答案,来自Greg:

String.valueOf(stringBuffer).getBytes()

2
这将首先复制缓冲区。如果输入的stringBuffer大小为1MB,则将创建另一个1MB对象,然后将其转换为字节。这不是一个好的解决方案。 - chendu
@chendu,你有什么推荐的解决方案吗? - Eric
@Eric,我没有一个干净的解决方案。也许我们不应该使用字符串缓冲区。最接近的肮脏解决方案是通过反射访问StringBuffer变量:private transient char[] toStringCache;并将其复制到String类变量private final char[] value;中。 - chendu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接