我有一个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)
)的字节数组转换为字符串。
答案 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);