读取Mmap的有效方法

时间:2018-07-17 13:26:32

标签: go system-calls mmap

我正在使用syscallmmap中读取字节数组:

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)

有没有更有效的方法?

0 个答案:

没有答案