21

java -如何将一部分字节数组附加到StringBuilderJava下的对象?我有一段从 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
 }
4

3 回答 3

28

您不应为此使用 a StringBuilder,因为这可能会导致可变宽度编码的编码错误。您可以使用 ajava.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 数据),那么使用 aStringBuilder将起作用。

于 2013-04-11T13:46:48.600 回答
17

您可以从缓冲区中创建一个字符串:

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

然后,如果您需要,您可以将其附加到 StringBuilder。

于 2011-02-09T23:05:34.090 回答
-2

像下面这样的东西应该可以为您解决问题。

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
于 2011-02-09T23:09:14.787 回答