我将尝试使用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"异常或仅读取对象的部分内容而没有报错。
请注意,对于IOUtils.toByteArray(...)
,BufferedInputStream
应该不是必要的,无论是否存在都没有影响。
在调试器中逐行执行代码时,似乎不会出现此问题。
这在我的Android 2.3.3设备和3.2设备上发生。它在WiFi和3G上都会出现。
有任何想法吗?
附:对象大小约为250k