【发布时间】:2012-01-25 20:16:17
【问题描述】:
我正在尝试使用 AWS Android SDK 1.0.4 或 1.0.3 从 S3 下载对象。
这是我的代码:
AmazonS3Client client = getConnection(userCredentials);
S3Object obj = client.getObject(workspaceName, objectName);
ObjectMetadata meta = obj.getObjectMetadata();
long size = meta.getContentLength();
logger.info("S3 object length: "+size);
InputStream is = new BufferedInputStream(obj.getObjectContent());
byte[] fragmentBytes = IOUtils.toByteArray(is);
logger.info("Read bytes: "+ fragmentBytes.length);
这有时,很少,有效。大多数时候要么抛出“java.net.SocketException: Socket is closed”,要么不报告错误,但只读取对象的一部分。
请注意,BufferedInputStream 对于IOUtils.toByteArray(...) 来说不是必需的,它是否存在也没有区别。
在调试器中逐行执行代码时似乎不会出现问题。
这发生在我的 Android 2.3.3 设备和 3.2 设备上。它发生在 WiFi 和 3G 上。
有什么想法吗?
ps> 物体大约 250k 大
【问题讨论】: