日期:2014-05-20  浏览次数:20746 次

大家看看为什么会出现这样的结果? 有什么好办法,使得输出和输入一样.
byte[]   data   =   new   byte[4];
data[0]   =   26;
data[1]   =   -61;
data[2]   =   0;
data[3]   =   0;

String   str   =   new   String(data);
byte[]   b   =   str.getBytes();

for   (int   i   =   0;   i   <   b.length;   i   ++)
{
        System.out.println( "b[ "   +   i   +   "]: "   +   b[i]);
}

结果为:
b[0]:26
b[1]:63
b[2]:0
b[3]:0

------解决方案--------------------
public class test{
public static void main(String[] args){
byte[] data = new byte[4];
data[0] = 26;
data[1] = -61;
data[2] = 0;
data[3] = 0;

String str = new String(data);
byte[] b = str.getBytes();

for(int i = 0; i < b.length; i++)
{
System.out.println( "b[ " + i + "]: " + b[i]);
}
}
}
结果为:
b[0]:26
b[1]:-61
b[2]:0
b[3]:0
------解决方案--------------------
具体原因我不知道

说说我的想法仅供参考
b[1]最后的结果是63,ascii码里63是?

String str = new String(data)
应该是将byte转为char存到字符串里

-61转成char,没有标准的字符对应,实际str里相应的位置什么都没存!
byte[] b = str.getBytes();
这时候,再得到byte的时候,这个位置实际上转不回来了!
jdk可能在这里默认得用?号来处理了,就得到了63

实际上你用别的值,比如-60,-66等。得到的结果都是63
------解决方案--------------------
在将byte[]转换为String和将String转换成byte的过程中可以制定使用的字符集。修改成以下的样子后就可以了。
byte[] data = new byte[4];
data[0] = 26;
data[1] = -61;
data[2] = 0;
data[3] = 0;

String str;
try
{
str = new String(data,0,4, "ISO-8859-1 ");
byte[] b = str.getBytes( "ISO-8859-1 ");
for (int i = 0; i < b.length; i ++)
{
System.out.println( "b[ " + i + "]: " + b[i]);
}
} catch ( UnsupportedEncodingException e )
{
// TODO Auto-generated catch block
e.printStackTrace();
}