如果放在数组a中new String(a,"ISO8859_1");
试试看

解决方案 »

  1.   

    byte mydata[];
            String str = null;
            mydata = ……;//
            for(int i=0;i < mydata.length; i++){
              str = str + (char)mydata[i];
            }
    比较傻,但有效
      

  2.   

    老大你要用new String(byte[])干什么?
    “-128”肯定是“?”啦!
    你到底要干什么?
    你是不是想要这样啊:        byte mydata[];
            String str = null;
            String allStr=null;
            mydata = ……;//
            for(int i=0;i < mydata.length; i++){
              str =(new Integer(mydata[i])).toString;
              allStr=new String(allStr+str);
            }
    最后,如果你的字节数组存的都是-128,那么allStr将是:
    -128-128-128.........
      

  3.   

    不行,我是想把-128当一个字节存在String
      

  4.   

    代码如下:
       byte tt[]=new byte[2];
       tt[0]=-128;
       tt[1]=-128;
       String s=new String(tt);//这里试过很多编码类型都没用。
       byte aa[]=s.getBytes();
       System.out.println(new String(aa));输出是??。请问这种失真现象是否能解决?
      

  5.   

    byte[] b = {'a','b','c'};
    String str = new String(b);
    str = new String(str.getBytes("iso-8859-1"),"GB2312");
    写了一个笨办法,呵呵,肯定有比这简单的方法吧
      

  6.   

    你举的是a,b,c是可见的字符,我是指不可见的
      

  7.   

    个人认为 String s=new String(tt);是把tt[0]和tt[1]都当成ASCII码来进行转换,而像“-128”这样的ASCII码到底有没有你有没有查ASCII码表?即使能转换,也应该是中文字符吧。
    我还是没搞明白你想干什么。
      

  8.   

    除了-128以外,-1到-127你用byte[]存入String再取回都是成功的,代码:
       byte tt[]=new byte[4];
       tt[0]=-127;
       tt[1]=-127;
       tt[2]=-127;
       tt[3]=-127;
       String s=new String(tt);
       System.out.println(s);
       byte aa[]=s.getBytes();
       System.out.println(aa[0]);  
       System.out.println(aa[1]);
       System.out.println(aa[2]);
       System.out.println(aa[3]);
       System.out.println(new String(aa));将输出:
    亖亖
    -127
    -127
    -127
    -127
    亖亖同样,你在byte tt[]里赋值从-1到-127都可以得到类似结果
    但是-128不同:
    byte tt[]=new byte[4];
       tt[0]=-128;
       tt[1]=-128;
       tt[2]=-128;
       tt[3]=-128;
       String s=new String(tt);
       System.out.println(s);
       byte aa[]=s.getBytes();
       System.out.println(aa[0]);  
       System.out.println(aa[1]);
       System.out.println(aa[2]);
       System.out.println(aa[3]);
       System.out.println(new String(aa));结果是:
    ??
    63
    63
    并且JAVA提示异常:
    Exception ... java.lang.ArrayIndexOutOfBoundsException:2
    异常原因是没有aa[2]可以显示,数组已越界。这就是-128的特殊性:-1到-127的byte转换为
    String是每双字节转换为一个我们所不认识的汉字,但两个-128转换成了1个?号,最终再转换
    回byte时造成数组越界
      

  9.   

    其实我是在一个压缩算法后得到一个byte[],其中就有-128,接下来我调用easycics中的SetValue(String,String)函数,byte[]对应第二个参数。这样我就要把byte[]转成String才能传过去,可是在用new String(byte[])时,JAVA把一些不可见的字符转成了"?",就是63
    以上各位所举的例子还是没有解决这个问题.
      

  10.   

    没看懂你的意思,不过我知道Java的byte类型有可能是负的,可以这样转换成正值:
    int unsignedByte = signedByte < 0 ? signedByte + 256 : signedByte;
    这样大概就能识别字符了,在做转化的处理就方便了,你先试试。
      

  11.   

    请问liuchuan(不得安息):照你那样去做的话,一个 unsignedByte==125,你说它是原来的
    byte[]=125呢还是byte[]=-131?
    当然你的思路值得借鉴
      

  12.   

    Java没有无符号数,只要Byte[]来得正确,不需作任何转换,用相同字符集一定可以还原成String的
    哎,没救了
      

  13.   

    字符一个一个的处理,转换负数可以用下面这个语句:
    int i = b>= 0 ? b : 256+b
    从<Java网络编程》里看的
      

  14.   

    kinzey34(无声之舞):
    没看清,这个帖子回了两次,厚厚,不好意思~java没有无符号类型,只能用相同位数的int代替了,只要你清楚使用的是有符号还是无符号的,一般没有多大问题,反过来就不好说了,不过没有那样用的吧。例如:
    byte[] input = new byte[10];
    for (int i = 0;i < input.length;i++) {
      int b = in.read();
      if (b == -1) break;
      input[i] = (byte)b;
    }