zoukankan      html  css  js  c++  java
  • go bytes包详解

    一:创建缓冲器

    bytes.buffer是一个缓冲byte类型的缓冲器

    1、使用bytes.NewBuffer创建:参数是[]byte的话,缓冲器里就是这个slice的内容;如果参数是nil的话,就是创建一个空的缓冲器。

    2、bytes.NewBufferString创建

    3、bytes.Buffer{} 

    代码演示 

    package main
    
    import (
    	"bytes"
    	"fmt"
    )
    func main() {
    	buf1 := bytes.NewBufferString("hello")
    	buf2 := bytes.NewBuffer([]byte("hello"))
    	buf3 := bytes.NewBuffer([]byte{'h','e','l','l','o'})
    	//以上三者等效,输出//hello
    	buf4 := bytes.NewBufferString("")
    	buf5 := bytes.NewBuffer([]byte{})
    	//以上两者等效,输出//""
    	fmt.Println(buf1.String(),buf2.String(),buf3.String(),buf4,buf5,1)
    }
    

    二:写入到缓冲器

    package main
    import (
    	"bytes"
    	"fmt"
    )
    func main() {
    	s := []byte(" world")
    	buf := bytes.NewBufferString("hello")
    	fmt.Println(buf.String())    //hello
    	buf.Write(s)                 //将s这个slice添加到buf的尾部
    	fmt.Println(buf.String())   //hello world
    }
    
    package main
    import (
    	"bytes"
    	"fmt"
    )
    func main() {
    	s := " world"
    	buf := bytes.NewBufferString("hello")
    	fmt.Println(buf.String())    //hello
    	buf.WriteString(s)           //将string写入到buf的尾部
    	fmt.Println(buf.String())    //hello world
    }
    

    3、WriteByte方法,将一个byte类型的数据放到缓冲器的尾部

    package main
    
    import (
    	"bytes"
    	"fmt"
    )
    
    func main() {
    	var s byte = '?'
    	buf := bytes.NewBufferString("hello")
    	fmt.Println(buf.String()) //把buf的内容转换为string,hello
    	buf.WriteByte(s)         //将s写到buf的尾部
    	fmt.Println(buf.String()) //hello?
    }
    

    4、WriteRune方法,将一个rune类型的数据放到缓冲器的尾部

    package main
    
    import (
    	"bytes"
    	"fmt"
    )
    func main() {
    	var s rune = '好'
    	buf := bytes.NewBufferString("hello")
    	fmt.Println(buf.String()) //hello
    	buf.WriteRune(s)
    	fmt.Println(buf.String()) //hello好
    }
    

    三、从缓冲器写出

    WriteTo方法,将一个缓冲器的数据写到w里,w是实现io.Writer的,比如os.File

    package main
    import (
    	"bytes"
    	"os"
    )
    func main() {
    	file,_ := os.Create("text.txt")
    	buf := bytes.NewBufferString("hello world")
    	buf.WriteTo(file)
    }

    四、读出缓冲器

    1、Read方法,给Read方法一个容器,读完后p就满了,缓冲器相应的减少

    package main
    import (
    	"bytes"
    	"fmt"
    )
    func main() {
    	s1 := []byte("hello")
    	buff := bytes.NewBuffer(s1)
    	s2 := []byte(" world")
    	buff.Write(s2)
    	fmt.Println(buff.String()) //hello world
    
    	s3 := make([]byte,3)
    	buff.Read(s3)     //把buff的内容读入到s3,s3的容量为3,读了3个过来
    	fmt.Println(buff.String()) //lo world
    	fmt.Println(string(s3))   //hel
    	buff.Read(s3) //继续读入3个,原来的被覆盖
    
    	fmt.Println(buff.String())     //world
    	fmt.Println(string(s3))    //"lo "
    }
    

    2、ReadByte方法,返回缓冲器头部的第一个byte,缓冲器头部第一个byte取出

    package main
    import (
    	"bytes"
    	"fmt"
    )
    func main() {
    	buf := bytes.NewBufferString("hello")
    	fmt.Println(buf.String())
    	b,_ := buf.ReadByte()   //取出第一个byte,赋值给b
    	fmt.Println(buf.String()) //ello
    	fmt.Println(string(b))   //h
    }
    

    3、ReadRune方法,返回缓冲器头部的第一个rune

    package main
    import (
    	"bytes"
    	"fmt"
    )
    func main() {
    	buf := bytes.NewBufferString("hello")
    	fmt.Println(buf.String())
    	b,_ := buf.ReadByte()   //取出第一个byte,赋值给b
    	fmt.Println(buf.String()) //ello
    	fmt.Println(string(b))   //h
    }
    

    五、读入缓冲器

    package main
    import (
    	"bytes"
    	"fmt"
    	"os"
    )
    func main() {
    	file, _ := os.Open("text.txt")
    	buf := bytes.NewBufferString(" ")
    	buf.ReadFrom(file)
    	fmt.Println(buf.String()) //bob hello world
    }
    

    六、从缓冲器取出

    package main
    
    import (
    	"bytes"
    	"fmt"
    )
    func main() {
    	buf := bytes.NewBufferString("hello world")
    	fmt.Println(buf.String())
    	b := buf.Next(2)  //取前2个
    	fmt.Println(buf.String()) //llo world
    	fmt.Println(string(b)) //he
    }
  • 相关阅读:
    移动开发iOS&Android对比学习--异步处理
    PHP中文乱码解决办法[转]
    在eclipse里配置Android ndk环境 适用于windows mac 和linux[转]
    android在更新ADT以后报java.lang.NoClassDefFound的解决办法
    在Mac OS下配置PHP开发环境
    在iOS中使用百度地图
    简单说明CentOS源码安装程序
    SecureFXPortable中文乱码
    从Linux下载文件到Windows没有换行问题
    从Windows复制文件到Linux显示乱码问题
  • 原文地址:https://www.cnblogs.com/zh718594493/p/15761596.html
Copyright © 2011-2022 走看看