如何解决Android Java OutputStream将整个文件缓冲到流中
我有一个应用程序,需要从图库(或从相机应用程序)中加载视频文件到该应用程序,然后将该视频文件发送到HTTP PUT请求到预先签名的S3上传网址。
我的问题是,当我在Android Studio上查看事件探查器时,代码的HTTPURLConnection部分似乎正在占用大量内存。在特定时刻内存使用量的增加等于视频文件的大小,因此我假设整个视频文件字节都已加载到内存中。这是我的代码段以及到目前为止我尝试过的内容。 所有这些试验最终都具有相同的内存使用结果。
HttpURLConnection connection = (HttpURLConnection) urls[0].openConnection();
connection.setDoOutput(true);
connection.setRequestMethod("PUT");
connection.setRequestProperty("Content-Type","video/mp4");
BufferedInputStream in =
new BufferedInputStream(getActivity().getContentResolver()
.openInputStream(uri));
DataOutputStream out =
new DataOutputStream(connection.getOutputStream());
int bufferSize = 8 * 1024;
byte[] buffer = new byte[bufferSize];
int len = 0;
while ((len = in.read(buffer)) != -1) {
out.write(buffer,len);
out.flush();
// After I flush the output stream,shouldn't the out.size() be 0?
// When I print logs here,the out stream's size keeps growing to the video file's size.
}
in.close();
out.close();
我也尝试过
IOUtils.copyStream(in,out);
我也尝试使用BufferedOutputStream
代替DataOutputStream
- 从代码中,为什么我一次从输入流中读取8 KB的事实,但我的代码仍将整个文件加载到内存中?
- 当我刷新DataOutputStream时,为什么我的OutputStream仍然不是0字节?
- 对于超过200MB的大文件,实现此目标的最佳方法是什么?
预先感谢
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。