传输大文件时内存不足

时间:2018-10-17 18:50:18

标签: go large-files gob

我正在使用Gob传输大文件(〜1 GB)或许多小文件(〜30 MB)。服务器正在循环运行,并在客户端发送时接收文件。

如果我发送一个大文件或几个小文件,我的代码可以工作,但是第二次发送大文件时,它返回“严重错误:运行时:内存不足”。如果我发送一个大文件,请停止该程序,然后再次启动并发送另一个大文件,则它可以工作。

它会通过Gob接收文件并写入文件,但不会释放内存。

服务器代码

type FileGob struct {
  FileName    string
  FileLen     int
  FileContent []byte
}

func handleConnection(conn net.Conn) {
  transf := &FileGob{}
  dec := gob.NewDecoder(conn)
  err := dec.Decode(transf)       // file from conn to var transf
  if err != nil {
    fmt.Println("error to decode into buffer:", err)
  }

  conn.Close()
  file, err := os.Create("sent_" + transf.FileName)
  if err != nil {
    fmt.Println("error to create file:", err)
  }
  file.Write(transf.FileContent)     // writes into file

  fileStat, err := file.Stat()
  if err != nil {
    fmt.Println("error to get File Stat:", err)
  }

  file.Close()
  fmt.Printf("File %v was transferred\n", transf.FileName)
  fmt.Printf("Transferred: %d, Expected: %d\n", fileStat.Size(), transf.FileLen)
}

0 个答案:

没有答案