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

时间:2010-12-29 11:00:18

标签: java byte

我有一个151字节的字节数组,通常是一条记录,需要将记录插入到oracle数据库中。在151字节的数组范围内,从0到1是记录id,2到3是引用id,4到9是日期值。字节数组中的以下数据是日期值。我想将其转换为字符串

byte[] b= {48,48,49,48,48,52};  // when converted to string it becomes 10042. 

new String(b);  // current approach

有没有办法有效地将某个范围(Arrays.copyOfRange(b,0,5))的字节数组转换为字符串。

5 个答案:

答案 0 :(得分:15)

new String(b, 0 ,5);

Gee,谁能猜到?每个人都费心去看API doc,那是谁。

答案 1 :(得分:1)

使用String(bytes[] bytes, int offset, int length)构造函数:http://download.oracle.com/javase/1.5.0/docs/api/java/lang/String.html#String(byte [],int,int)

new String(b, 0, 5);

答案 2 :(得分:1)

如果你需要为记录中的每个区域创建一个字符串,我建议使用子字符串方法:

byte[] wholeRecord = {0,1,2 .. all record goes here .. 151}
String wholeString = new String(wholeRecord);
String id = wholeString.substring(0,1);
String refId = wholeString.substring(1,3);
...

根据字符串编码,实际偏移量可能会有所不同。

这种方法的优点是字节数组只复制一次。对substring()的后续调用不会创建副本,但只会引用带偏移量的第一个副本。因此,您可以节省一些内存和阵列复制时间。

答案 3 :(得分:1)

这里没有任何答案认为您可能没有使用ASCII。将字节转换为字符串时,应始终考虑字符集。

new String(bytes, offset, length, charset);

答案 4 :(得分:0)

这里很棒(不高效):)

    byte[] b = { 48, 48, 49, 48, 48, 52 };
    ByteArrayInputStream bais = new ByteArrayInputStream(b);

    BufferedReader buf = new BufferedReader(new InputStreamReader(bais));

    String s = buf.readLine();
    System.out.println(s);