怎么将字节数组用PO打包?


在SSH框架下,由于要给服务器以字节流的形式传用户在界面输入的参数过去,就是用客户端的action类往后台传字节的时候,由于是多个参数,每个参数都要转化为字节数组,请问怎么将这些字节数组用PO打包?
我是这样写了一下,这是三个参数,但是不知道怎么包在一起,这样分别写应该是不对的。。。。。
OutputStream ssss = new socket(“192.12.1.0”,5565).outputstream;;
byte[] b={aa.tobyte()}
ssss .write(b);
b={bb.tobyte()}
ssss .write(b);
b={cc.tobyte()}
ssss .write(b);

或者这样行吗?
byte[] b={(aa+bb+cc).tobyte()}

我这边好像需要组装一个完整的协议包。包含俩部分:包头和包体,包头就是字符个数 ,就是你发参数汇总的字符个数,包体就是发的内容,我也没明白这是啥意思,是一种协议?我这里也没体现字符个数什么的,也不知道对不对

java socket

无奈的天然卷 11 years, 11 months ago

用16进制的每个字符需要用4位二进制位来表示(23 + 22 + 21 + 20 = 15),你可以把每个字节转换成两个相应的16进制字符,即把字节的高4位和低4位分别转换成相应的16进制字符H和L,并组合起来得到字节转换到16进制字符串的结果new String(H) + new String(L)。 同理,相反的转换也是将两个16进制字符转换成一个字节,原理同上。根据以上原理,我们就可以将字节数组转换为16进制字符串了,当然也可以将16进制字符串转换为字节数组了。这样转换后就可以直接发送或者接受再转换了,

   
  /**
  

* Convert byte[] to hex string.这里我们可以将byte转换成int,然后利用Integer.toHexString(byte)来转换成16进制字符串。
* @param src byte[] data
* @return hex string
*/

public static String bytesToHexString(byte[] src){

StringBuilder stringBuilder = new StringBuilder("");
if (src == null || src.length <= 0) {
return null;
}
for (int i = 0; i < src.length; i++) {
int v = src[i] & 0xFF;
String hv = Integer.toHexString(v);
if (hv.length() < 2) {
stringBuilder.append(0);
}
stringBuilder.append(hv);
}
return stringBuilder.toString();

}

/**
* Convert hex string to byte[]
* @param hexString the hex string
* @return byte[]
*/
public static byte[] hexStringToBytes(String hexString) {
if (hexString == null || hexString.equals("")) {
return null;
}
hexString = hexString.toUpperCase();
int length = hexString.length() / 2;
char[] hexChars = hexString.toCharArray();
byte[] d = new byte[length];
for (int i = 0; i < length; i++) {
int pos = i * 2;
d[i] = (byte) (charToByte(hexChars[pos]) << 4 | charToByte(hexChars[pos + 1]));
}
return d;
}

/**
* Convert char to byte
* @param c char
* @return byte
*/

private byte charToByte(char c) {
return (byte) "0123456789ABCDEF".indexOf(c);
}

超威包大人 answered 11 years, 11 months ago

Your Answer