我有一个程序,它结合了多个 http 响应并写入文件上的相应查找位置。我目前正在这样做
client := new(http.Client)
req, _ := http.NewRequest("GET", os.Args[1], nil)
resp, _ := client.Do(req)
defer resp.Close()
reader, _ := ioutil.ReadAll(resp.Body) //Reads the entire response to memory
//Some func that gets the seek value someval
fs.Seek(int64(someval), 0)
fs.Write(reader)
这有时会导致大量内存使用,因为ioutil.ReadAll.
bytes.Buffer我试过
buf := new(bytes.Buffer)
offset, _ := buf.ReadFrom(resp.Body) //Still reads the entire response to memory.
fs.Write(buf.Bytes())
但还是一样。
我的意图是对文件使用缓冲写入,然后再次寻找偏移量,并继续再次写入,直到收到流的结尾(并因此从 buf.ReadFrom 捕获偏移值)。但它也将所有内容都保存在内存中并立即写入。
将类似流直接写入磁盘而不将整个内容保存在缓冲区中的最佳方法是什么?
一个可以理解的例子将不胜感激。
谢谢你。
繁星coding
相关分类