java socket作为serversocket接收客户端发来的数据,组成方式比如为“6个字节的字符串+16个字节字符串+16位二进制的MD5码+|END|\0"。下面折磨我很久的问题出现了:
方案一:
byte[] tb=new byte[1000];
socket s;
int   readLength   =   s.getInputStream().read(buffer,   offset,   maxLength);
received = new String(buffer);
System.out.println("received="+received);  
读取数据流,打印出来前面的没问题,却没有|END|.方案二:
byte[] tb=new byte[1000];
socket s;
s.getInputStream().read(tb); 
String received=new String(tb);
System.out.println("received="+received);  
打印出来是|END|+16个字节的字符串+16位MD5码,却没有开头的6位长的字符串了方案三:
BufferedReader buffer= new BufferedReader(new InputStreamReader(s.getInputStream()));         received = buffer.readLine();
        System.out.println("received="+received);  
这个打印出来到是没有问题,但是我却无法把buffer变量转换位byte[]数组,因此无法完成把MD5码取出来验证的任务。
也许有人会说先用received.getBytes()来把字符串转换为byte[],但是这样的话,我试过,二进制的MD5码根本就不能还原为客户端发送的最初值,原因应该是用buffer.readLine()转换成字符串的时候,二进制转成ASCII码有了乱码,然后再转成byte[]的时候自然没有办法还原了。苦苦求索,而不得,望各位不吝指教