比如说仪器通过串口发送一组字节数据,0xEF, 0xEE, 0xCD,(这些字节超出了java中的byte表示范围)java用byteInputStream()去去读取的话,会怎么处理,是报错,还是将其转换成byte型的字节数组接收?
帮帮忙啊,谢谢啦!

解决方案 »

  1.   

    ByteArrayInputStream 这个类可以进行读取操作,在JDK的帮助文档中明确的写出,我们在进行构造字节流的时候可以用一个字节数组作为参数,ByteArrayInputStream(byte[] buf) ,也就是把流中的数据读到数组中.你可以看看JDK的帮助稳定在InputStream类中都写出来啦.
      

  2.   

    我想知道的是对于输入的byte数值超出java中定义的byte表示范围,java会怎么处理,报错还是正常接收,比如将0xff转化为0x01.
      

  3.   

    既然你发送的数据超出了byte的范围,那说明可以把它分为几个byte来读如一个汉字就可以分两个字节来读。
      

  4.   

    不是这样的,串口通信之间传的字节,但归根结底还是传的二进制数,比如远程端口传送一个字节0xFF,转换成二进制值是11111111,这边主机在串口接收到的也是11111111,其实还是0xFF,但是java中的byte表示范围是127~-128,所以我就有疑问,接收到的这个字节java会怎么处理,报错还是将这个字节表示成-1.
      

  5.   

    byteArrayInputStream()内部会用一个Byte数组来接受这些数据,显然会出现数据类型不相同,
    那它是怎么处理?是抛出异常,还是强制转换? 
      

  6.   

    我觉得这不应是java的ByteArrayOutputStream做的事情,而是程序员还怎么处理,因为ByteArrayOutputStream它只接收一个字节数组,只要你提供给它一个这样的数组就可以了,
    那么这个数组还是得你来提供的。
      

  7.   


    因为java里没有无符号数,所以0xFF读出来就是-1。
    ps:这个问题其实你试一下就知道了
      

  8.   

    读取时不会出错,但是你要对读取后的数据进行处理,即把四个byte组成一个int。