Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将java字节数组的一部分附加到StringBuilder_Java - Fatal编程技术网

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

将java字节数组的一部分附加到StringBuilder,java,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 appen

如何将字节数组的一部分附加到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
 }

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

String s=新字符串(缓冲区,0,len)


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

下面的内容应该可以帮您完成

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

您不应该为此使用
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
将起作用。

您的文本使用什么编码?上述方法可用于ASCII,但在任何多字节字符串(如UTF-8或UTF-16)上可能会失败(您可以从缓冲区读取部分字符串,并在末尾仅获取一半的字符定义;同时为下一部分保留无效的开头)
string s=新字符串(缓冲区,0,len,“UTF-8”)
对于除asciid之外的其他编码,您是否会检查其执行速度是否比tearrayoutputstream快?我想会的。@ Kashyap有一个好点,它也可能在代码点中间断开字符串。