如何判断读到正确的数据及完整的数据?

解决方案 »

  1.   

    你读取数据不是用流吗?
    那直接用read方法不行吗
    可以确定是否读完,至于是否正确
    就不大清楚了
      

  2.   

    read方法返回大于零就表示读取成功啊,当小于零时就表示流已经结束了如果出现错误则会抛出IOException的
      

  3.   

    InputStream is = **** //获取输入流
    int readSize = 0;
    byte[] buff = new byte[1024];while(true) {
     readSize = is.read(buff);
     
     if(readSize > -1) {
      System.out.println("读取到输入内容:");
      for(byte b : buff)
        System.out.print(b + " ");
      System.out.println("");
     } else {
      System.out.println("读取输入流结束,或者此输入流产生错误无法读取");
     }
    }
      

  4.   

    IO流涉及到二进制信息的传输问题。
    一般来讲,数据传输,都会有相应的协议。
    网络传输,一般都用TCP协议。UDP协议的,也有用的。
    对Java而言,UDP比较容易判断,是否有数据读入。楼主看一下API就明白了。
    至于TCP协议来传输数据,一般在此基础上,还要封装一层应用层的协议,包头部分应注明该信息包的长度。这样,在读取数据的时候,就有了依照。
    如果没有相应的封装协议,楼主可以尝试使用read方法,先读取一个字节,如果返回的是-1 ,则说明已经是InputStream的结尾了,但,该方法是阻塞读的。如果返回的不是-1 ,要注意,之后读取的数据要从byte[]的第1个位置开始读取,将刚才读取的int型数据转换成byte型数据,添加到byte[]的第0个位置。
    如果阻塞读对应用带来不便,楼主可以配合available方法,进行读取程序的设计。
      

  5.   

    正常的应用时双方有数据MAC校验最好.