socket中使用InputStream的read方法

客户端使用OutputSteam发送字符串
如果服务端用如下代码,数组读不到客户端发的字符串
ServerSocket server = new ServerSocket(4444);
Socket socket = server.accept();
InputStream is = socket.getInputStream();
byte[] receiveBytes = new byte[9999];
int index = 0;
while(index<=9999){
int tmpLength = is.read(receiveBytes,index,9999-index);
if(tmpLength==-1)
break;
index+=tmpLength;
}

但是如果服务端使用如下代码,却能读到客户端发的字符串
ServerSocket server = new ServerSocket(4444);
Socket socket = server.accept();
InputStream is = socket.getInputStream();
int a = is.read();

为什么?是哪里写的问题,一直没找出来问题,大神们帮看下。

http://blog.csdn.net/l_serein/article/details/6672054

byte[] receiveBytes = new byte[9999];
发送数据超过了,就不能接收了

你那个read的语法不对吧。。。正常来说,都会加一个缓存在缓存一下,你这直接读取,倒是可以,但是读出的还asc2码值,read的三个参数:b - 字节数组进行填充。
off - 从开始的偏移存储数。len - 要读取的字节数。这个len,你可以用is.available()来得到,off就是从开始,你要读取多少个数

推荐看下:http://cuisuqiang.iteye.com/blog/1434416
也许能解决

大神能帮忙解释一下什么原因吗?我现在用socketInputstream遇到一样的问题,接收不完整,直接在读的时候抛出socket close 不知道什么原因