我的程序在执行InputStream.read()或OutputStream.write()语句时,不返回任何内容,程序死在那里了,请问什么情况下会出现这种情况?谢谢

解决方案 »

  1.   

    我就贴一部分吧,太多了我这是对串口进行读写的代码,如果执行单步调试(直接运行当然也不成),当执行is.read(b)或os.write(wb)时,程序就不动了,无法继续往下走,当然也不出现异常情况。这是怎么回事?try {
      if(sp != null) {
        OutputStream os = sp.getOutputStream();
        InputStream is = sp.getInputStream();    byte[] b = new byte[4096];
        is.read(b);
        System.out.println(DataUtility.BytesToString(b));

        os.flush();
        byte[] wb = ("AT").getBytes();
        os.write(wb);    b = new byte[4096];
        is.read(b);
        System.out.println(DataUtility.BytesToString(b));
      }
    } catch(IOException e) {
      e.printStackTrace();
    }
      

  2.   

    is.read(b); ->>>>is.read(b,0,b.length());
    同样os.write(wb); ---》》》os.write(b, 0,b.length());
      

  3.   

    os.write(wb); ---》》》os.write(wb, 0,wb.length());
      

  4.   

    答:
    1)第一个is.read(b)在网络上(或串口通信上)等待读网络数据,但读不到。确信对方发送了数据且flush()了?
    2)os.write(wb); 之后应该flush()一下。
      

  5.   

    可能还是我没说清楚,就算到os.write(wb)这句,执行完后应该继续执行下一句吧,但是os.write(wb)执行不过去就好像进行休眠一样不动了。 
      

  6.   

    答:不是os.write(wb)好像进行休眠一样不动了(因为write(..)几平不会发生阻塞。),而是它后面的另一个:
    b = new byte[4096]; 
        is.read(b); 
    这个is.read(b);不动了。读不到数据,故“好像进行休眠一样不动了”。
      

  7.   

    但我把read去掉,直接让他执行write也是死在那,所以不知道为什么
      

  8.   

    那就是OutputStream os = sp.getOutputStream(); 的问题了
      

  9.   

    找到问题所在了,手机USB映射串口,显示的是COM5其实用的是COM6晕死了。谢谢hmsuccess 和 jiangnaisong