Search code examples
javacharacter-encodingstringbuildermultibyte-characters

Append part of Java byte array to StringBuilder


How do I append a portion of byte array to a StringBuilder object under Java? I have a segment of a function that reads from an InputStream into a byte array. I then want to append whatever I read into a StringBuilder object:

byte[] buffer = new byte[4096];
InputStream is;
//
//some setup code
//
while (is.available() > 0)
{
   int len = is.read(buffer);
   //I want to append buffer[0] to buffer[len] into StringBuilder at this point
 }

Solution

  • You should not use a StringBuilder for this, since this can cause encoding errors for variable-width encodings. You can use a java.io.ByteArrayOutputStream instead, and convert it to a string when all data has been read:

    byte[] buffer = new byte[4096];
    ByteArrayOutputStream out = new ByteArrayOutputStream();
    InputStream is;
    //
    //some setup code
    //
    while (is.available() > 0) {
       int len = is.read(buffer);
       out.write(buffer, 0, len);
    }
    String result = out.toString("UTF-8"); // for instance
    

    If the encoding is known not to contain multi-byte sequences (you are working with ASCII data, for instance), then using a StringBuilder will work.