将部分java字节数组附加到StringBuilder

bob*_*bob 17 java

如何将一部分字节数组附加到Java下的StringBuilder对象?我有一个函数段,从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
 }
Run Code Online (Sandbox Code Playgroud)

Sou*_*man 26

您不应该使用a StringBuilder,因为这可能导致可变宽度编码的编码错误.您可以使用a 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
Run Code Online (Sandbox Code Playgroud)

如果已知编码不包含多字节序列(例如,您正在使用ASCII数据),则使用a StringBuilder将起作用.


Ian*_*las 15

你可以从缓冲区中创建一个String:

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

然后,如果需要,可以将它附加到StringBuilder.

  • `String s = new String(buffer,0,len,"UTF-8");`用于其他编码而不是ASCII (4认同)
  • 你的文字使用什么编码?上面的方法将使用ASCII,但可能会失败任何多字节字符串,如UTF-8或UTF-16(您可以从缓冲区读取部分字符串,并在结尾处只获取一半的char定义;也为下一部分留下无效的开头) (2认同)