Добавьте часть массива java byte в StringBuilder

Как добавить часть байтового массива в объект StringBuilder в Java? У меня есть сегмент функции, которая считывает из InputStream в массив байтов. Затем я хочу добавить все, что я прочитал в объект StringBuilder:

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
 }

Ответы

Ответ 1

Вы не должны использовать StringBuilder для этого, так как это может привести к ошибкам кодирования для кодировок с переменной шириной. Вместо этого вы можете использовать java.io.ByteArrayOutputStream и преобразовать его в строку, когда все данные были прочитаны:

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

Если известно, что кодировка не содержит многобайтовых последовательностей (например, вы работаете с данными ASCII), то использование StringBuilder будет работать.

Ответ 2

Вы можете просто создать строку из своего буфера:

String s = new String(buffer, 0, len);

Затем, если вам нужно, вы можете просто добавить его в StringBuilder.

Ответ 3

Что-то вроде ниже должно сделать трюк для вас.

byte[] buffer = new byte[3];
buffer[0] = 'a';
buffer[1] = 'b';
buffer[2] = 'c';
StringBuilder sb = new StringBuilder(new String(buffer,0,buffer.length-1));
System.out.println("buffer has:"+sb.toString()); //prints ab