socket.getInputStream().read方法的疑问

背景:之前三星5.0手机会出现网络断开的现象,其他手机没有问题。之前疑问如下,可以不关注。
http://bbs.csdn.net/topics/391070063

现在,调查出socket.getInputStream.read(buffer[])的时候,返回-1,然后socket连接就不可用了。所以出现问题。

客户端连接服务器代码(和服务器端连接一直存在):

socket.connect(new InetSocketAddress(ip, PORT),
CONNECT_SERVER_TIME_OUT);
socket.setKeepAlive(true);
is = socket.getInputStream();
os = socket.getOutputStream();


客户端读取数据的代码(没有进行循环):

byte buffer[] = new byte[1024];
int len = is.read(buffer);// 输入流读取数据
if (len > 0) {
// 对读取的数据buffer进行操作
} else {
// 抛出读取数据异常(小米手机不会运行到这里;三星5.0系统手机,会在read后返回-1,然后运行到这里)
}


① 对inputStream.read(buffer[])的理解:
输入流中有数据就进行读取,不论长度,都读取到buffer中,然后返回读取的实际字节数。
输入流中没有数据,就处于阻塞状态,一直处于等待状态,知道有数据才会读取到值。
因为socket一直连接着的,流没有被关闭,所以返回值正常情况下不会出现-1的情况。
不知道这个理解对不对?

我在网上查找过,类似的问题如下,可以见到看下:
http://bbs.csdn.net/topics/390975606?page=1#post-399467427

②上述情况,在小米手机上没有问题,在三星5.0手机上,就会出现问题。这种情况如何解释?及有可能的解决方法。

望各路大神不吝赐教~~
======================================
调查补充20150724:
如1L所说,使用了SocketChanel方式,验证还会出现这种问题。
另外,写数据的地方,采用了多线程的方式去写的,读数据的时候 采用一个线程去读的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值