Package os - The Go Programming Language (google.cn)
〇、 io包下的Reader,Writer接口。
所有读写方法需要实现该接口。
一、os包下文件的指针类型实现了读写方法。
1) 使用文件实现的Read()
创建一个字节切片用来存储读出的字节数据,可以发现每次读取四个字节,
最后一次读取没满四个字节时bs切片会回填最后一次上一次的数据,这个时候正确的操作是使用Read()方法的返回值m,m为每次实际读取的字节数。使用bs切片和m限定真正的读取到的数据。
2) 使用文件实现的Writer()方法
文件读Read()方法中和文件资源建立连接的os.Open()方法只指定文件的路径。
在文件写操作中os.OpenFile()不仅指定了存放数据的文件路径,还提供了文件模式,如果
文件不存在需要创建,文件权限是可写的,每次写入文件都在文件末尾追加而不是从头开始覆盖文件内容。
io包下还提供了字符串写进文件的WriteString接口
相应的os包下的file类也实现了字符串写入文件的WriteString()方法。
二、 复制文件的几种方式
1)使用os包下文件实现的Read(),Writer()方法。
2)io包下提供的Copy()方法
3)ioutil包下提供的ReadFile()和WriteFile()
该方法是一次性的读取数据和一次性的写出数据,数据过大会内存溢出,不适合大文件。
io包下的几种复制方法
io包下除了Copy()方法,还有CopyN()方法,CopyBuffer()方法。
底层都调用了copyBuffer(),在不指定缓冲区buf大小时,默认是32个字节。
三、 seek()方法
四、 断点续传
源文件,临时文件,目标文件。从源文件中读取数据,临时文件去存储更新源文件复制的总字节数count,然后目标文件再去复制源文件中的数据。
假如程序运行异常,在下一次程序启动时,从源文件中读取的数据偏移量根据临时文件的count来定。
比如从源文件中读取8000个字节,临时文件中存储8000用来代表count,这时程序异常结束,下次复制操作时就根据8000的偏移量从源文件中读取写入到目标文件中,同时更新临时文件的count值。