1.func Copy(dst Writer, src Reader) (written int64, err error)这个函数是从一个文件读取拷贝到另外一个文件,一直拷贝到读取文件的EOF,所以不会返回io.EOF错误,参数是写入目标器和读取目标器,返回int64的拷贝字节数和err信息
import (
"fmt"
"io"
"os"
)
func main() {
r, _ := os.Open("test.txt")
w, _ := os.Create("write.txt")
num, err := io.Copy(w, w)
if err != nil {
fmt.Println(err)
}
fmt.Println(num) //返回int64的11 打开我的write.txt正是test.txt里边的hello widuu
}
2.func CopyN(dst Writer, src Reader, n int64) (written int64, err error)看函数就知道了跟上述的是一样的,只是多加了一个读取数的限制,然后我们看下代码
import (
"fmt"
"io"
"io/ioutil"
"os"
)
func main() {
r, _ := os.Open("test.txt")
w, _ := os.Create("write1.txt")
num, err := io.CopyN(w, r, 5)
if err != nil {
fmt.Println(err)
}
defer r.Close()
b, _ := ioutil.ReadFile("write1.txt")
fmt.Println(string(b)) //输出 hello
fmt.Println(num) //5
}
3.func ReadAtLeast(r Reader, buf []byte, min int) (n int, err error)这个函数就是从读取器中读取数据放到我们的buf中,限定了最小的读取字节数,如果我们读取的数据小于最小读取器,譬如你设定min的值是8,但是你读取的数据字节数是5就会返回一个`io.ErrUnexpectedEOF`,如果大于就会返回`io.ErrShortBuffer`,读取完毕会有`io.EOF`~~,多讲一些哈,这个Reader只要我们满足这个interface就可以用这个
type Reader interface {
Read(p []byte) (n int, err error)
}
其中*File就支持func (f *File) Read(b []byte) (n int, err error)
import (
"fmt"
"io"
"os"
)
func main() {
r, _ := os.Open("write1.txt")
b := make([]byte, 20)
defer r.Close()
var total int
for {
n, err := io.ReadAtLeast(r, b, 8)
if err == nil {
fmt.Println("Read enough value:", string(b)) // Read enough value: hello widuu
}
if err == io.ErrUnexpectedEOF { //读取了的数据小于我们限定的最小读取数据8
fmt.Println("Read fewer value:", string(b[0:n]))
}
if err == io.ErrShortBuffer{ //这个是我们设定的buf也就是b小于我们限定8
fmt.Println("buf too Short")
os.Exit(1)










