华为U1310设备HTTP下载问题及解决方法

需积分: 10 0 下载量 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这类特定设备的问题,采用上述的解决策略是一个有效且实用的方法。