我正在使用 Amazon S3 并想上传一个 InputStream(这需要计算我发送的字节数)。
public static boolean uploadDataTo(String bucketName, String key, String fileName, InputStream stream) {
ByteArrayOutputStream out = new ByteArrayOutputStream();
byte[] buffer = new byte[1];
try {
while (stream.read(buffer) != -1) { // copy from stream to buffer
out.write(buffer); // copy from buffer to byte array
}
} catch (Exception e) {
UtilityFunctionsObject.writeLogException(null, e);
}
byte[] result = out.toByteArray(); // we needed all that just for length
int bytes = result.length;
IO.close(out);
InputStream uploadStream = new ByteArrayInputStream(result);
....
}
有人告诉我一次复制一个字节效率非常低(对于大文件来说很明显)。我不能让它更多,因为它会为 增加填充ByteArrayOutputStream
,我不能去掉它。我可以将它从 中剥离result
,但我怎样才能安全地做到这一点?如果我使用 8KB 缓冲区,我可以只去掉最右边的buffer[i] == 0
吗?还是有更好的方法来做到这一点?谢谢!
在 Windows 7 x64 上使用 Java 7。