Android Java OutputStream将整个文件缓冲到流中
我有一个应用程序需要将视频文件从gallery(或camera应用程序)加载到应用程序中,然后将该视频文件发送到HTTP PUT请求中,并发送到预先签名的S3上载url 我的问题是,当我在androidstudio上查看分析器时,代码的HTTPURLConnection部分似乎占用了大量内存。在那个特定时刻内存使用量的增加相当于视频文件的大小,因此我假设整个视频文件字节都加载到内存中。这是我的代码片段和我到目前为止尝试的内容。 所有这些试验的结果都是相同的Android Java OutputStream将整个文件缓冲到流中,java,android,http,inputstream,outputstream,Java,Android,Http,Inputstream,Outputstream,我有一个应用程序需要将视频文件从gallery(或camera应用程序)加载到应用程序中,然后将该视频文件发送到HTTP PUT请求中,并发送到预先签名的S3上载url 我的问题是,当我在androidstudio上查看分析器时,代码的HTTPURLConnection部分似乎占用了大量内存。在那个特定时刻内存使用量的增加相当于视频文件的大小,因此我假设整个视频文件字节都加载到内存中。这是我的代码片段和我到目前为止尝试的内容。 所有这些试验的结果都是相同的 HttpURLConnecti
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, 0, 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(输入、输出)代码>
我还尝试使用了BufferedOutputStream
而不是DataOutputStream
从代码来看,为什么我的代码会将整个文件加载到内存中,尽管我每次从输入流读取8KB的数据
当我刷新DataOutputStream时,为什么我的OutputStream仍然不是0字节
对于超过200MB的大文件,实现这一目标的最佳方法是什么
提前谢谢//当我在这里打印日志时
我看不到你在这样做。也许缓冲输入流正在这样做?尝试不使用。@blackapps是的,我只是在那里打印日志,但我没有复制粘贴日志代码。我尝试改用常规的InputStream,但没有luckIt是HttpURLConnection
这样做的,因此它可以设置Content-length
头。您可以通过使用分块传输模式来避免这种情况。注意:不要在环内冲洗。“刷新输出流后,out.size()是否应该为0?”:否。。。。因为返回“到目前为止写入此数据输出流的字节数”。不是缓冲区中当前的字节数:事实上,DataOutputStream
没有缓冲区。