Socket通信的有关问题

Socket通信的问题
out = new DataOutputStream(socket.getOutputStream());
in = new DataInputStream(socket.getInputStream());
// 接收字符串
byte[] buf = new byte[AppConfig.MAX_TCP_PACKAGE_LENGTH];
int num = 0;
num = in.read(buf);
String recv = new String(buf);
recv = recv.substring(0, num);
部分代码如上:请问num的长度为什么和recv的长度不一样呢,怎么截取呢。

------解决方案--------------------
这是因为num是接收的数据的长度,而recv是用buf数组中数据以系统默认字符集转码得到的字符串,两者不相干。
可以利用String(byte[] data, int offset, int byteCount)构造函数来截取。
String recv=new String(buf,0,num);