DataInputStream inputStream = new DataInputStream(s.getInputStream());
int read = 0;
if (inputStream != null) {
    read = inputStream.read(buf);
}
if (read == -1) {
    break;
}
System.out.println(new String(buf,0,read));结果,取到的字母是对的,数字不对(乱码),请问如何解决

解决方案 »

  1.   

    用这个String(byte[] bytes, int offset, int length, Charset charset) 构造函数,指定编码看看。
      

  2.   

    既然是结构体
    当然也是以位读,以位转换,怎么会直接一个string就完事了...
      

  3.   

    java和C通信,数据传输要自己解析
    在C端,很可能就是直接把结构体转成char*指针发送的(或者用char[]数组memcpy以后发送的),所以java端得到的字符数据是正常的,因为都是占用一个byte,而数字数据,占用多个byte,这样,把多个byte转成String肯定就被解析为unicode编码的字符而乱码(因为系统并不知道你的多个byte到底是数字类型的数据还是多字节字符的编码),所以就需要自己针对这样的字节解析
    正确的做法,应该是字节了解通信结构体的长度,然后接收的时候解析
    比如,C的结构体,第一个数据成员是char[2],第二个是int,等等,那么java端接收
    DataInputStream inputStream = new DataInputStream(s.getInputStream());
    int read = 0;
    byte[] first = new byte[2];
    read = inputStream.read(first);
    int second = inputStream.readInt(); //可以这样读入,否则,
                                             //读入byte数组后自己把4位byte数组信息转成int