华为U1310设备HTTP下载问题及解决方法
需积分: 10 187 浏览量
更新于2024-09-17
收藏 5KB TXT 举报
"在华为U1310手机上遇到HTTP下载写文件时的问题,通过`http.openInputStream().available()`获取的文件长度始终为1,而在其他设备上则能正确返回实际值。解决方法是先创建一个缓冲区,然后读取数据。"
在Android开发过程中,特别是涉及到文件下载和处理HTTP连接的场景,可能会遇到特定设备兼容性问题。在这个问题中,华为U1310手机在执行HTTP下载时,通过`HttpConnection`的`openInputStream().available()`方法获取到的可用字节数始终为1,而不是预期的文件实际大小。这可能导致下载不完全或无法正常处理文件。
`HttpURLConnection`或其兼容实现(如在JavaME中的`HttpConnection`)的`openInputStream().available()`方法通常用于预估输入流中可读取的数据量。然而,这个方法在不同设备和平台上的实现可能存在差异,尤其是在老版本的Android系统上,可能并不总是可靠。因此,在华为U1310上,它返回了错误的信息。
为了解决这个问题,开发者采取了一个策略性的解决方法,即不再依赖`available()`方法来确定读取的字节数,而是使用一个固定大小的缓冲区,例如`byte[1024]`,进行读取。这样,即使不能获取到准确的文件大小,也可以通过循环读取直到流结束来确保读取完整个文件。这种方法虽然可能增加内存消耗,但可以保证在不支持`available()`方法的设备上也能正常工作。
在提供的代码片段中,可以看到以下关键步骤:
1. 创建`HttpConnection`对象并打开连接。
2. 使用`checkConnection().check(http)`进行网络连接检查。
3. 打开输入流`is=http.openInputStream();`
4. 替换原来的`int size=is.available();`,用固定大小的缓冲区`byte[] buffer=new byte[1024];`
5. 通过`is.read(buffer);`循环读取输入流,直到流结束。
6. 关闭输入流和连接,并对读取到的数据进行进一步处理,如解析XML或写入本地文件。
在处理类似问题时,开发者需要注意以下几点:
- 当遇到设备兼容性问题时,应首先尝试使用通用和兼容性更强的解决方案。
- 避免过度依赖特定API的功能,尤其是那些在文档中声明可能不准确的方法。
- 对于重要的数据操作,如文件下载,应考虑使用断点续传、错误重试和完整性校验等机制,以提高可靠性。
- 对不同设备进行充分的测试,确保应用在各种环境下都能正常运行。
通过以上分析,我们可以了解到在处理HTTP下载时,特别是在面临设备兼容性挑战时,如何调整代码以确保数据的正确获取和处理。对于华为U1310这类特定设备的问题,采用上述的解决策略是一个有效且实用的方法。
2019-04-25 上传
2019-01-21 上传
2023-12-16 上传
2021-09-27 上传
2022-11-09 上传
wanghuibo
- 粉丝: 2
- 资源: 5
最新资源
- Fisher Iris Setosa数据的主成分分析及可视化- Matlab实现
- 深入理解JavaScript类与面向对象编程
- Argspect-0.0.1版本Python包发布与使用说明
- OpenNetAdmin v09.07.15 PHP项目源码下载
- 掌握Node.js: 构建高性能Web服务器与应用程序
- Matlab矢量绘图工具:polarG函数使用详解
- 实现Vue.js中PDF文件的签名显示功能
- 开源项目PSPSolver:资源约束调度问题求解器库
- 探索vwru系统:大众的虚拟现实招聘平台
- 深入理解cJSON:案例与源文件解析
- 多边形扩展算法在MATLAB中的应用与实现
- 用React类组件创建迷你待办事项列表指南
- Python库setuptools-58.5.3助力高效开发
- fmfiles工具:在MATLAB中查找丢失文件并列出错误
- 老枪二级域名系统PHP源码简易版发布
- 探索DOSGUI开源库:C/C++图形界面开发新篇章