如何将字节数组转换为字符串

问题描述:

我使用以下代码提取歌曲的元数据,以及如何将字节数组(buf)转换为字符串?请帮助我,提前致谢。如何将字节数组转换为字符串

String mint = httpConnection.getHeaderField("icy-metaint"); 
int b = 0; 
int count =0;  
while(count++ < length){ 
b = inputStream.read();   
}    
int metalength = ((int)b)*16; 
if(metalength <= 0) 
    return; 
byte buf[] = new byte[metalength]; 
inputStream.read(buf,0,buf.length); 

1)。从流中读取字节:

// use net.rim.device.api.io.IOUtilities 
byte[] data = IOUtilities.streamToBytes(inputStream); 

2)。从字节创建一个字符串:

String s = new String(data, "UTF-8"); 

这意味着你知道文本数据从服务器发送之前,编码中的编码。在上面的例子中,编码是UTF-8。 BlackBerry支持以下字符编码:

* "ISO-8859-1" 
* "UTF-8" 
* "UTF-16BE" 
* "US-ASCII" 

默认编码是“ISO-8859-1”。所以当你使用String(byte[] data)构造函数时,它和String(byte[] data, "ISO-8859-1")一样。

如果你不知道服务器使用什么编码,那么我建议首先尝试使用UTF-8,因为现在它几乎已经成为服务器的默认编码。另请注意,服务器可能会通过http头发送编码,以便您可以从响应中提取它。然而,我看到很多服务器把“UTF-8”放到头文件中,而实际上使用ISO-8859-1甚至ASCII来进行数据编码。

String具有接受一个字节数组,你可以使用这个构造。 参见例如http://java.sun.com/javame/reference/apis/jsr139/java/lang/String.html

+0

仍然得到字符串,而不是humen可读形式 – Jisson 2011-04-04 10:51:26

+0

您确定您试图转换为字符串的数据实际上是人类可读的数据吗? – 2011-04-04 13:10:20

作为@Heiko提到你可以直接使用构造函数创建字符串。这也适用于黑莓Java:

byte[] array = {1,2,3,4,5}; 
String str = new String(array); 
+0

我试过String s = new String(buf,“ISO-8859-1”);但是仍然只有一部分s是字符串格式 – Jisson 2011-04-04 11:03:03