我正在使用 Go 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)
}