日期:2014-05-20  浏览次数:20668 次

[求助]ftp方式下载文件问题
程序要实现的是用ftp方式从服务器端下载一个视频文件到手机上保存成文件并播放.
接收数据的代码如下:
length是文件大小

InputStream   is   =   dataSocket.openInputStream();
byte[]   data   =   new   byte[length];
int   idx   =   0;
int   c   =   0;
while   (running   &&   c   !=   -1)   {
      if   (idx   <   length)   {
            c   =   is.read();
            data[idx++]   =   (byte)c;
      }   else   {
            c   =   -1;
      }
}

这样做能得到完整的文件,但这样做下载很慢,我想提升下载速度就改成了下面这样:

InputStream   is   =   dataSocket.openInputStream();
byte[]   data   =   new   byte[length];
int   idx   =   0;
while   (running)   {
      for   (int   i   =   0;   i   <   (length   -   1)   /   1024   +   1;   i++)   {
            if   (i   ==   length   /   1024)   {
                  is.read(data,   idx,   length   %   1024);
                  idx   +=   length   %   1024;
            }   else   {
                  is.read(data,   idx,   1024);
                  idx   +=   1024;
            }
      }
      if   (idx   > =   length)   {
            break;
      }
}
可是这样得到的数据不完整,文件中会随机的少了一部分数据,导致文件不能播放,请问这是什么原因啊?代码有哪里写错了吗?希望知道的大虾指点下``先谢谢了~

------解决方案--------------------
当is里数据未达到1024时...
is.read(data, idx, length % 1024);好像是可以运行的...

改成下面试试

while (running) {
idx += is.read(data, idx, length-idx);
if (idx > = length) {
break;
}
}