34

How might I, in Java, convert a StringBuffer to a byte array?

bharath
  • 14,283
  • 16
  • 57
  • 95
Sanat Pandey
  • 4,081
  • 17
  • 75
  • 132
  • 9
    can you just do String.valueOf(stringBuffer).getBytes()? – Greg Giacovelli Nov 04 '11 at 05:50
  • 9
    Make sure to specify the encoding with `getBytes`... "Encodes this String into a sequence of bytes **using the platform's default charset**..." This is one of the silly areas where they didn't just pick a universal default. –  Nov 04 '11 at 06:03

2 Answers2

61

A better alternate would be stringBuffer.toString().getBytes()

Better because String.valueOf(stringBuffer) in turn calls stringBuffer.toString(). Directly calling stringBuffer.toString().getBytes() would save you one function call and an equals comparison with null.

Here's the java.lang.String implementation of valueOf method:

public static String valueOf(Object obj) {

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

}
Harshal Waghmare
  • 1,944
  • 2
  • 20
  • 21
35

I say we have an answer, from Greg:

String.valueOf(stringBuffer).getBytes()
Jeff Grigg
  • 1,004
  • 8
  • 7
  • 2
    this will first replicate the buffer. If the input stringBuffer is 1MB size then you will be creating another 1MB object and then converting it to bytes. Not a good solution. – chendu Sep 30 '22 at 05:39
  • @chendu what is your recommended suolution? – Eric Feb 06 '23 at 00:43
  • @Eric I dont have a clean solution. May be we shouldnt use string buffer. The closest dirty solution is to access the StringBuffer variable: `private transient char[] toStringCache; ` via reflections and copy it into String class variable `private final char[] value;` – chendu Feb 06 '23 at 04:34