
go bytes 浅析
发布日期:2021-05-10 23:13:04
浏览次数:21
分类:精选文章
本文共 1766 字,大约阅读时间需要 5 分钟。
Go语言 bytes 包 - 操作 byte slice 的便利方法
在 Go语言 开发过程中,bytes
包 提供了许多操作 byte slice 的便利方法。这些方法可以帮助开发者更方便地处理字节数据,适用于文件操作、网络通信等场景。本文将详细介绍 bytes
包 中的常用操作方法,并通过代码示例说明其使用方式。
1. 读取数据
bytes.NewReader
函数可以将 byte slice 转换为 bytes.Reader
结构体。该结构体实现了 Len()
、Size()
、Read()
、ReadAt()
、ReadByte()
等方法,可以用来读取和处理字节数据。
s := []byte("hello world")b := bytes.NewReader(s)fmt.Println("unread size: ", b.Len()) // 输出: 0fmt.Println("real size: ", b.Size()) // 输出: 11
2. 写入文件
通过 WriteTo
方法,可以将 bytes.Reader
中的字节数据写入文件。以下示例中,字节数据会被写入指定文件中。
f, err := os.OpenFile("./test-file", os.O_WRONLY, os.ModeAppend)handleErr(err)defer f.Close()n1, err := b.WriteTo(f)handleErr(err)fmt.Println("write numbers: ", n1) // 输出: 1
3. 重置数据
Reset
方法可以将 bytes.Reader
中的字节数据重新赋值,继续读取新的数据。
b.Reset([]byte("reset it."))fmt.Println("new b: ", b.Len(), b.Size()) // 输出: 11 11
4. 读取单个字节
ReadByte
方法可以从当前偏移量处读取一个字节的数据。
w, err := b.ReadByte()handleErr(err)fmt.Println("ReadByte: ", string(w)) // 输出: r
5. 偏移操作
Seek
方法可以改变读取的偏移量。通过 SeekCurrent
操作可以向前移动当前偏移量位置。
abs, err := b.Seek(1, io.SeekCurrent)handleErr(err)fmt.Println("after Seek: ", abs) // 输出: 2
6. 向前读取字节
UnreadByte
方法可以将当前偏移量处的字节向前读取。
handleErr(b.UnreadByte())fmt.Println("after UnreadByte: ", b.Len()) // 输出: 8
7. 读取特定位置的字节
ReadAt
方法可以从指定偏移量处读取字节数据。
a := make([]byte, 6)n, err := b.ReadAt(a, 3)handleErr(err)fmt.Println("a after ReadAt: ", string(a)) // 输出: et it.
8. 读取 Unicode 字符
ReadRune
方法可以读取当前偏移量处的一个 Unicode 字符。
r, n, err := b.ReadRune()handleErr(err)fmt.Println("readRune: ", string(r), n) // 输出: 你 3
9. 再次读取 Unicode 字符
在读取一个 Unicode 字符后,可以使用 UnreadRune
方法将其向前读取。
handleErr(b.UnreadRune())r, n, err := b.ReadRune()handleErr(err)fmt.Println("readRune: ", string(r), n) // 输出: 好 3
以上方法为 bytes
包 中常用的操作方法,开发者可以根据需要灵活组合使用,完成各种字节数据的读写操作。
发表评论
最新留言
表示我来过!
[***.240.166.169]2025年04月27日 08时45分20秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Linux驱动实现GPIO模拟I2C读写操作
2019-03-15
iJ配置Maven环境详解
2019-03-15
仿QQ登陆界面
2019-03-15
什么题目的暂时还没想好
2019-03-15
N皇后问题解法(递归+回朔)
2019-03-15
面试题 08.01. 三步问题
2019-03-15
剑指 Offer 11. 旋转数组的最小数字
2019-03-15
word文档注入(追踪word文档)未完
2019-03-15
作为我的第一篇csdn博客吧
2019-03-15
ajax异步提交失败
2019-03-15
一道简单的访问越界、栈溢出pwn解题记录
2019-03-15
Stream 某些API
2019-03-15
测试调用另一台电脑ip是否有用
2019-03-15
mos-excel集成文档
2019-03-15
chat 快问!
2019-03-15
6.Xml
2019-03-15
Linux总结
2019-03-15
DKT—Going Deeper with Deep Knowledge Tracing
2019-03-15
Android简单MVP解析接口列表,搜索框,点击切换
2019-03-15
ADB
2019-03-15