我正在使用syscall
从mmap
中读取字节数组:
file, e := os.Open(path)
if e != nil {...}
defer file.Close()
fi, e := file.Stat()
if e != nil {...}
data, e := syscall.Mmap(int(file.Fd()), 0, int(fi.Size()), syscall.PROT_READ, syscall.MAP_SHARED)
if e != nil {...}
data
是我需要的二进制数组。
我使用||
作为分隔符,因此我可以使用bytes.Split
来获取切片:
slices := bytes.Split(data, []byte("||"))
for _, s := range slices {
str := string(s[:])
fmt.Println(str)
}
这很好用,我还在uint32
的开头存储了消息总数(类型为mmap
,占用8个字节)。
写入新消息时,我可以通过读取前8个字节来获得消息总数。
假设我的邮件数量为n
,我仍然需要执行以下操作来阅读新邮件:
slices := bytes.Split(data, []byte("||"))
s := slices[n - 1]
str := string(s[:])
fmt.Println(str)
有没有更有效的方法?