今天想完成以前总是出错的文件上传,今天在文件上传中,我发现了一个有趣的东西,就是文件上传和下载时,有没有使用io.Copy来进行文件拷贝的区别
普通方法
func main() {
op,err1 :=os.Open("./a1.text")
of,err2 :=os.Create("./a2.text")
if err1!=nil || err2!=nil{
fmt.Println("文件拷贝失败")
return
}
var buf []byte=make([]byte,1024)
for {
n,err3 :=op.Read(buf)
if err3==io.EOF {
break
}
_,err4:=of.WriteString(string(buf[:n]))//这里特别重要,如果不使用
if err4!=nil{ //这个截取,他在最后获取复
fmt.Println("拷贝出现错误") //制文件的内容可能没有102
break //4,但也会把1024给拷贝的
} //文件,所有需要这个截取
}
}
使用了io.Copy
func main() {
op,err1 :=os.Open("./a1.text")
of,err2 :=os.Create("./a2.text")
if err1!=nil || err2!=nil{
fmt.Println("文件拷贝失败")
return
}
defer op.Close()
defer of.Close()
io.Copy(of,op)
}
区别:
- io.Copy代码简洁
- io.Copy运行速度更快(我试了一下一个大文件,io.Copy一下就可以了,普通的要好久好久)
原因
普通方法时将是把一个文件中的内容一点点的传递到另外一个文件中去,而 io.copy方法,它就是在文件指针之间直接复制的,所以速度快,占用的缓存也小