gpt4 book ai didi

java - DataOutputStream 在内部保存整个缓冲区?

转载 作者:行者123 更新时间:2023-12-02 00:08:02 24 4
gpt4 key购买 nike

在下面的代码中。我正在将文件读入一个小缓冲区(len = CHUNK_SIZE),我只想将此缓冲区写入输出流。但即使我在每个 block 之后刷新,我也会遇到堆溢出异常。好吧,如果我想流式传输小文件,一切都很好。但是刷新不应该也删除流中的所有数据吗?

URL url = new URL(built);
HttpURLConnection con = (HttpURLConnection)url.openConnection();
con.setDoOutput(true);
con.setDoInput(true);
con.setUseCaches(false);
//con.setChunkedStreamingMode(CHUNK_SIZE);
con.setRequestProperty("Content-Type", "multipart/form-data; boundary="
+ Boundary);

FileInputStream is = new FileInputStream(m_FileList.get(i));
DataOutputStream os = new DataOutputStream(con.getOutputStream());

// .....

while((read = is.read(temp, 0, CHUNK_SIZE)) != -1) {
bytesTotal += read;

os.write(temp, 0, read); // heap overflow here if the file is to big
os.flush();
}

最佳答案

DataOutputStream 根本不缓冲,但 HttpURLConnection 的输出流默认缓冲所有内容,因此它可以设置 Content-Length 标题。使用分块传输模式来防止这种情况。

这里实际上根本不需要 DataOutputStream:只需写入连接的输出流。

也不要在循环内使用flush()。

关于java - DataOutputStream 在内部保存整个缓冲区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13445106/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com