我实现了自定义BackupAgent,部分数据是大约1 MB的图像。创建备份时,每个图像都作为单独的实体写入。在恢复图像时,我想以这样的4K(BUFFER_SIZE)块读取数据并将其写入如下文件:
FileOutputStream out = new FileOutputStream(file);
byte[] buffer = new byte[BUFFER_SIZE];
int offset = 0;
int n = 0;
// readEntityData returns 0 when all data of entity is read
while (0 != (n = data.readEntityData(buffer, offset, BUFFER_SIZE))) {
out.write(buffer, 0, n);
offset += n;
}
但是,这只能正确地读取第一个4K块,在第二次调用readEntityData
时会抛出错误代码为0xffffffff的IOException。
当我使缓冲区与实体的数据大小一样大并且一次读取所有数据时,它可以很好地工作,但我认为使用较小的缓冲区会更安全。
有没有人经历过这样的事情?我发现的所有示例都是一次读取数据而不是多个块。