为了账号安全,请及时绑定邮箱和手机立即绑定

在 Go 中,如何有效地将流式 http 响应正文写入文件中的查找位置?

在 Go 中,如何有效地将流式 http 响应正文写入文件中的查找位置?

Go
蛊毒传说 2022-01-17 10:15:09
我有一个程序,它结合了多个 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 somevalfs.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 捕获偏移值)。但它也将所有内容都保存在内存中并立即写入。将类似流直接写入磁盘而不将整个内容保存在缓冲区中的最佳方法是什么?一个可以理解的例子将不胜感激。谢谢你。
查看完整描述

1 回答

?
繁星coding

TA贡献1797条经验 获得超4个赞

使用io.Copy将响应正文复制到文件中:


resp, _ := client.Do(req)

defer resp.Close()

//Some func that gets the seek value someval

fs.Seek(int64(someval), 0)

n, err := io.Copy(fs, resp.Body)

// n is number of bytes copied


查看完整回答
反对 回复 2022-01-17
  • 1 回答
  • 0 关注
  • 196 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信