我想开发一个从服务器接收文件的android应用程序。
服务器首先发送带有((FileOriginalName和FileLength)的数据包,然后开始发送数据数据包(一个一个/一个bloc一个bloc),每个数据包包含((8Kb文件数据和blocIndex)] 。
当我收到第一个数据包时,我将创建一个具有给定长度的文件:
RandomAccessFile f = null;
try {
f = new RandomAccessFile(originalFileName, "rw");
f.setLength(length);
} catch (IOException e) {
e.printStackTrace();
}
然后,我每次从服务器接收数据包时都调用以下代码:
FileOutputStream _fOS = new FileOutputStream(fileOriginalPath);
_fOS.write(blockData, blockIndex << 13, blockData.length);
_fOS.close();
我在_fOS.write上收到以下错误:
java.lang.ArrayIndexOutOfBoundsException:length = 5077; regionStart = 8192; regionLength = 5077
我找到解决方法,
对于第一个数据包,我仅保存originalFileName,
对于数据包,
for each received packet i call the following method
RandomAccessFile f = new RandomAccessFile(originalFileName, "rw");
f.seek(blockIndex << 13);
f.write(blockData);
f.close();
希望有帮助,谢谢