golang中bytes包

golang标准库中提供了bytes包,该包几乎和strings包给string提供的功能,只不过bytes包对应的是[]byte。和strings一样,并不修改传入变量,而是返回其副本修改之后的内容。

整个包分为以下几种操作:转换、比较、去除、分割、查找、替换

一、转换
将s的副本中所有字符修改成大写(小写),然后返回

func ToUpper(s []byte) []byte  //  全部转大写
func ToLower(s []byte) []byte  // 全部转小写
func ToTitle(s []byte) []byte  // 全部转大写

使用指定的映射表将对s的副本中的所有字符进行修改,然后返回

func ToUpperSpecial(_case unicode.SpecialCase, s []byte) []byte
func ToLowerSpecial(_case unicode.SpecialCase, s []byte) []byte
func ToTitleSpecial(_case unicode.SpecialCase, s []byte)

将s的副本中的所有单词的首字符修改为Title格式返回。

func Title(s []byte) []byte

二、比较
比较两个[]byte,nil参数相当于[]byte{},

 a < b  返回-1
a == b 返回0
a > b   返回1
func Compare(a, b []byte) int

判断a、b是否相等,nil参数相当[]byte{}。

func Equal(a, b []byte) bool

判断s、t是否相似,忽略大写、小写、标题三种格式的区别。

func EqualFold(s, t []byte) bool

三、去除
去除s的副本左右包含cutset中的字符(返回s的副本)

func Trim(s []byte, cutset string) []byte
func TrimLeft(s []byte, cutset string) []byte
func TrimRight(s []byte, cutset string) []byte

去掉s副本的左右边中f函数中返回true的字符

func TrimFunc(s []byte, f func(r rune) bool) []byte
func TrimLeftFunc(s []byte, f func(r rune) boo) []byte
func TrimRightFunc(s []byte, f func(r rune) bool) []byte

去除s副本两边的空白(unicode.IsSpace)

func TrimSpace(s []byte) []byte

去掉s副本的前缀prefix(后缀suffix)

func TrimPrefix(s, prefix []byte) []byte
func TrimSuffix(s, suffix []byte) []byte

四、分割
Split函数以sep为分隔符将s的副本切割分成多个子串,结果不包含分隔符。
如果sep为空,则将s的副本分割成Unicode字符列表。
SplitN可以指定分割次数,超出n的部分将不进行分割,n小于0,表示分割所有。

func Split(s, sep []byte) [][]byte
func SplitN(s, sep []byte, n int) [][]byte

功能同Spelit,只不过结果包含分隔符(在各个子串尾部)

func SplitAfter(s, sep []byte) [][]byte
func SplitAfterN(s, sep []byte, n int) [][]byte

以连续空白为分隔符将s的副本分隔成多个子串,结果不包含分隔符。

func Fields(s []byte) [][]byte

以符合f的字符为分隔符将s的副本分割成多个子串,结果不包含分割符。

func FieldsFunc(s []byte, f func(rune) bool) [][]byte

以sep为连接符,将子串列表s的副本连接成一个字节串。

func Join(s [][]byte, sep []byte) []byte

将子串b重复count次后返回。

func Repeat(b []byte, count int) []byte

五、查找
判断s是否有前缀prefix(后缀suffix)

func HasPrefix(s, prefix []byte) bool
func HasSuffix(s, suffix []byte) bool

判断b中是否包含子串subslice(字符r)

func Contains(b, subslice []byte) bool
func ContainsRune(b []byte, r rune) bool

判断b中是否包含chars中的任何一个字符

func ContainsAny(b []byte, chars string) bool

查找子串sep(字节c、字符r)在s中第一次出现的位置,找不到则返回-1。

func Index(s, sep []byte) int
func IndexByte(s []byte, c byte) int
func IndexRune(s []byte, r rune) int

查找chars中的任何一个字符在s中第一次出现的位置,找不到则返回-1。

func IndexAny(s []byte, chars strings) int

查找符合f的字符在s中第一次出现的位置,找不到则返回-1。

func IndexFunc(s []byte, f func(r rune) bool) int

功能同上,只不过查找最后一次出现的位置。

func LastIndex(s, sep []byte) int
func LastIndexByte(s []byte, c byte) int
func LastIndexAny(s []byte, chars string) int
func LastIndexFunc(s []byte, f func(r rune) bool) int

获取sep在s中出现的次数

func Count(s, sep []byte) int

六、替换
将s副本中的前n个old替换为new,n<0则替换全部。

func Replace(s, old, new []byte, n int) []byte

将s副本中字符替换为mapping(r)的返回值,如果mapping返回负值,则丢弃该字符。

func Map(mapping func(r rune) rune, s []byte) []byte

将s副本转换为[]rune类型返回

func Runes(s []byte) []rune

<h3>type Reader</h3>
将切片b封装成bytes.Reader对象

func NewReader(b []byte) *Reader

bytes.Reader实现了如下接口:
1)io.ReadeSeeker
2)io.ReaderAt
3)io.WriterTo
4)io.ByteScanner
5)io.RuneScanner

// 返回未读取部分的数据长度
func (r *Reader) Len() int

// 返回底层数据的总长度,方便ReadAt使用,返回值不变。
func (r *Reader) Size() int64



type Buffer struct {...}
将buf包装成bytes.Buffer对象。

func NewBuffer(buf []byte) *Buffer

转化成bytes.Buffer对象

func NewBufferString(s string) *Buffer

Buffer是一个缓存,没有底层数据,缓存的容量会根据需要自动调整。大多数情况下,使用new(Buffer)就足以初始化一个Buffer了。
bytes.Buffer实现了如下接口:
1)io.ReadWrite
2)io.ReaderFrom
3)io.WriterTo
4)io.ByteWriter
5)io.ByteScanner
6)io.RuneScanner
未读取部分的数据长度

func (b *Buffer) Len() int

缓存的容量

func (b *Buffer) Cap() int

读取前n字节的数据并以切片形式返回,如果数据长度小于n,则全部读取。切片只在下一次读写操作前合法。

func (b *Buffer) Next(n int) []byte

读取第一个delim及其之前的内容,返回遇到的错误(一般是io.EOF)。

func (b *Buffer) ReadBytes(delim byte) (line []byte, err error)
func (b *Buffer) ReadString(delim byte) (line string, err error)

写入r的UTF-8编码,返回写入的字节数和error。
保留err是为了匹配bufio.Write的WriteRune

func (b *Buffer) WriteRune(r rune) (n int, err error)

写入s,返回写入的字节数和error。

func (b *Buffer) WriteString(s string) (n int, err error)

引用未读取部分的数据部分的数据切片(不移动读取位置)

func (b *Buffer) Bytes() []byte

返回未读取部分的数据字符串(不移动读取位置)

func (b *Buffer) String() string

自动增加缓存容量,以保证有n字节的剩余空间。
如果n小于0或无法增加则会panic。

func (b *Buffer) Grow(n int)

将数据长度截短到n字节,如果n小于0或大于Cap则panic。

func (b *Buffer) Teuncate(n int)

重设缓冲区,清空所有数据(包括初始内容)。

func (b *Buffer) Reset

转载自:https://www.jianshu.com/p/bc7baa8bb286

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,185评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,445评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,684评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,564评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,681评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,874评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,025评论 3 408
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,761评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,217评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,545评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,694评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,351评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,988评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,778评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,007评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,427评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,580评论 2 349

推荐阅读更多精彩内容

  • 4.7. Text Sequence Type — str Python中的文本数据由str对象或strings处...
    xpf2000阅读 3,227评论 0 2
  • 前言 最先接触编程的知识是在大学里面,大学里面学了一些基础的知识,c语言,java语言,单片机的汇编语言等;大学毕...
    oceanfive阅读 3,049评论 0 7
  • 前言 App优化 - 需要优化哪些? App优化 - 性能分析工具 App的3种启动方式 App优化 - App启...
    世道无情阅读 1,924评论 0 3
  • 余华在《在细雨中呼喊》中说过: 我不再装模作样地拥有很多友人,而是回到了孤单之中,以真正的我开始了独自的生活。有时...
    维爱之都阅读 266评论 0 0
  • 1. 赚钱的公司在卖什么? 很多人抱怨自己的行业不好,赚不到钱,付出得不到应有的回报。反观一些很“虚”的行业,如互...
    谭景桐阅读 5,264评论 14 128