共计 945 个字符,预计需要花费 3 分钟才能阅读完成。
seek 办法
seek 办法的目标是为了给下一个光标的读数据或者写数据设置偏移量的,他有 2 个参数,第一个是偏移多少个字节,第二个参数是从哪里开始偏移。
定义
type Seeker interface {Seek(offset int64, whence int) (int64, error)
}
具体怎么应用呢?
举个例子:
如果我有一个文件 test.txt,外面的内容是 hey it is liber,我想要从第五个字符 i 开始读取外面的数据,就能够这样写:
package main
import (
"fmt"
"io"
"log"
"os"
)
func main() {
fileName := "/Users/liberhome/GolandProjects/awesomeProject/I-package/April28_Go_io/test.txt" // 外面的内容是 hey it is liber
file, err := os.OpenFile(fileName, os.O_RDWR, os.ModePerm) // 抉择 OOpenFile, 模式抉择读写
if err != nil {log.Fatal(err)
}
defer file.Close()
// 读写
bs := []byte{0} // 首先创立一个切片, 不必搞太大 一个字节就足够了
file.Read(bs) // 这个时候 read,会默认读取文件第一个字节 h
fmt.Println(string(bs)) // 对了 插播一条 Goland-mac 的快捷键:shift+control(记住不是 command)+R = 运行
// 接下来 演示一下 seek 的用法
file.Seek(4, io.SeekStart) // 从头开始偏移 4 个字符
file.Read(bs) // 这个时候 read,会默认读取文件第 5 个字节 i
fmt.Println(string(bs))
}
参数设置
file.Seek(4, io.SeekStart) // 这里的第二个参数 能够有以下选项
- io.SeekStart : 去看定义就晓得 其实他就是个常量 0 代表的意思是绝对于文件结尾而言
- io.SeekCurrent : 常量 1,相当于光标目前所处地位而言
- io.SeekEnd: 常量 2,绝对于文件开端而言
- 当然了,如果晓得 0 1 2 别离代表什么,能够间接写数字,不过还是倡议用常量名字,可读性更好
正文完