以下是该方案:
我将数据从网络保存到本地存储。有时SD卡部分损坏。
我可以提出几种方法:
IOException的
假设在损坏的块上write
或flush
时会抛出IOException。由于我没有损坏的SD卡,因此尚未经过测试。所以这是一个假设。
比较尺寸
在每flush
之后,我将写缓冲区的大小与实际文件进行比较。我认为尽管它不合适但更实用。
校验
此方法不可靠,因为有两个因素会导致文件损坏:网络或SD卡出错。所以我无法指出哪个是真正的原因。
任何建议将不胜感激!提前谢谢。
更新:
抱歉晦涩难懂。我从HttpEntity.getContent()
读取数据写入RandomAccessFile
。 HttpEntity.getContent()
的基础协议是TCP。
答案 0 :(得分:0)
您可以尝试获取SD卡状态
Boolean Accessable = android.os.Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED);
if(Accessable)
{
// Sd card is accessable, write data
}
else
{
// probably corrupted or removed
}
答案 1 :(得分:0)
如果您使用TCP,将会处理网络错误。 TCP协议确实向应用程序开发人员透明/中止透明。如果无法正确接收数据,您将获得IOException。如果您不使用TCP,那么您可以构建逻辑以使用校验和进行一些验证。 一旦网络层完成其错误检查,您就可以获得SD卡错误逻辑。