android 怎么解决流读到末尾报-1异常 15

byte[]buffer=newbyte[1024];intlen=0;StringBuildersb=newStringBuilder();while((len=mIn... byte[] buffer = new byte[1024];
int len = 0;
StringBuilder sb = new StringBuilder();
while ((len = mInputStream.read(buffer)) != -1) {
temp = new String(buffer, 0, len);
sb.append(temp);
}
这段代码目的是读取流里的数据,然后保存起来,但是在android下读到流的末尾-1 会报IO异常,求助怎么解决
报的异常:java.io.IOException: bt socket closed, read return: -1 ,socket没有关闭,只是在客户端write完后 outputstream.close
展开
 我来答
锺芮0G30d3
2016-06-12 · TA获得超过628个赞
知道小有建树答主
回答量:124
采纳率:0%
帮助的人:159万
展开全部
(len = mInputStream.read(buffer)) != -1

这个没有错误, 是读取流中的字节个数, 到达流末尾了, len会是-1, 结束循环, 问题在于读取流字节的时候你的bt socket关闭了, 导致这个异常, 需要检查为什么bt sokct closed。
追问
这个问题我也很纳闷,我客户端仅做了  outputStream.close,如果不关闭,不会出这个异常,我查了下资料,大体意思是在linux下 read到末尾会报异常,在windows下read到末尾返回-1,不知道是这样不。
追答

我这边读取流的方式和你的类似

public static String getContentFromInput(InputStream is) {
   if (is == null) {
      DebugUtils.logD(TAG, "getContentFromInput passed null InputStream in");
      return null;
   }
   ByteArrayOutputStream out = new ByteArrayOutputStream();
   byte[] buffer = new byte[4096];
   int size;
   try {
      size = is.read(buffer);
      while (size >= 0) {
         out.write(buffer, 0, size);
         size = is.read(buffer);
      }
      out.flush();
      buffer = out.toByteArray();
      out.close(); //关闭输出流
      String result = new String(buffer, "UTF-8");
      DebugUtils.logD(TAG, "getContentFromInput return " + result);
      return result;
   } catch (IOException e) {
      e.printStackTrace();
   }
   return null;
}

你把你 outputStream.close的代码片段帖出来看一看

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式