go中使用了io.Copy()和使用普通方法进行文件拷贝的区别

今天想完成以前总是出错的文件上传,今天在文件上传中,我发现了一个有趣的东西,就是文件上传和下载时,有没有使用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)
}

区别:

  1. io.Copy代码简洁
  2. io.Copy运行速度更快(我试了一下一个大文件,io.Copy一下就可以了,普通的要好久好久)

原因

普通方法时将是把一个文件中的内容一点点的传递到另外一个文件中去,而 io.copy方法,它就是在文件指针之间直接复制的,所以速度快,占用的缓存也小

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值