先把部分代码简略的写下:
InputStream in;
while(in.read()!=-1){                  
int c = 0;
StringBuffer sb = null;
// 如果有串口事件发生
if (ev.getEventType() == SerialPortEvent.DATA_AVAILABLE) {
         in = sPort.getInputStream();
sb = new StringBuffer();
while ((c=in.read())!=-1) {
         sb.append((char) c);
         System.out.print(sb);
         sb = new StringBuffer();
                       }
                  }
}
怪事1:
while 循环里如果最后写 sb = new StringBuffer();会出现正常结果(虽然正确但我认为是不合理的结果)
结果:
AT+cmgf=0
OK
如果把while 循环里如果最后写 sb = new StringBuffer()删了就出现一堆东西(虽然不是正确结果但是我认为是合理的)
结果:
AATAT+AT+cAT+cmAT+cmgAT+cmgfAT+cmgf=AT+cmgf=0AT+cmgf=0
AT+cmgf=0
AT+cmgf=0
AT+cmgf=0
OAT+cmgf=0
OKAT+cmgf=0
OK
AT+cmgf=0
OK
怪事2:in.read()!=-1跳不出while循环!接收到的变量in的信息应该是"AT+cmgf=0\nOK\n\r";为什么跳不出来?
谢谢 各位啦!!
qq:154279503
e_mail:[email protected]

解决方案 »

  1.   

    sb = new StringBuffer()这个是对象,你new之后,每次内容清空了=“”
    应该是in.read()!=‘\n\r’这些的ascii吗吧?
      

  2.   


    因为你的StringBuffer()里面还有内容,所以会一直添加内容相当于String +="cmgAT+"
      

  3.   

    谢谢 各位了 问题已经解决了 哈哈
    回复:
    1楼:我原来是真么想的,但是结果表明2楼的说法是对的。
    同时:如果使用in.read()!=‘\n\r’ 就会有隐患:如果接收到的信息里面含有"...\n\r...\n\r"那就错误了。用in.read()==-1是流结尾,要好一点
    2楼:这样的解释和结果吻合,但是好使不明白in.read()出不来,搜了好多帖子感觉有一个挺合理的:iostream如果不关闭就会默认还会有流传进来,所以就算in.read()==-1了它还是要尝试去读的。所以解决办法就是读到结尾的时候关闭inStream。
    3楼:in.read()返回的是读取字符的ASSII码,到流末尾时它返回-1.解决办法:
    //读取有效的data长度
    available=in.available()
    byte[] buff=new byte[available]; 
    System.in.read(buff);
    //关闭读入流
    in.Close(); 
    //这样就可以跳出循环执行下面的代码了