2011-02-09 49 views
14

如何将字节数组的一部分追加到Java下的StringBuilder对象中?我有一个从InputStream读入字节数组的函数段。那么我想追加无论我读入StringBuilder对象:将String字节数组的一部分追加到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 
} 

回答

18

你不应该使用这个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将起作用。

12

你可以只创建一个字符串出你的缓冲区:

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

然后,如果你需要,你可以只是追加它到一个StringBuilder。

+2

你的文本使用什么编码?上面的方法可以使用ASCII码,但是可能会失败,如UTF-8或UTF-16等任何多字节字符串(您可以从缓冲区中读取部分字符串,并在结尾处只取得一半的字符定义;还会为下一部分留下无效的开头) – tomash 2012-08-11 14:29:29

-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 
相关问题