java使用socket实现文件传输时的接收判断

java实现socket的关键参考代码主要来自以下文章
java Socket 文件传输

  • 当java实现socket信息传输后,在进一步实现文件传输的时候经常会发生文件传了出去,但接收方收不到,即生成的文件大小为0字节。这是因为接收的时候没有做好判断导致的。

  • 主要判断模块如下所示:
     while ((length = s.read(buffer, 0, buffer.length)) > 0) { 
//      while ( (int )s.readObject() != -1) {// 将文件内容写到文件中  
          fos.write( buffer,0,length);
          System.out.println(length);
      }  
  • s.read(buffer, 0, buffer.length)函数的注释:

    • int temp = fis.read (buffer ,0,buffer.length);

    • buffer声明的数组,0是fis读操作的开始位置,buffer.length为读的字符数,执行完这一句后,buffer数组中就存储了接收到的“文件”里从开始到buffer.length个字符数,不过因为buffer是byte类型的字符数组,需要使用String s = new String (buffer);转换成字母,来转换下才可以看到具体的内容。

    • 返回值temp是操作字符的个数,如果temp=-1 那么说明该语句执行错误,如果temp=buffer.length,说明buffer中存满了数据,如果temp < buffer.length,说明文件内容不足buffer.length个字符。

  • 仅当流中不再有其他的数据,而且也不再需要更多的数据(如已关闭的套接字或文件尾)时,Read 才返回 0。即使尚未到达流的末尾,实现仍可以随意返回少于所请求的字节。

你可能感兴趣的:(Java,socket,文件传输)