Go中各种newreader和newbuffer的使用总结

 更新时间:2023年11月21日 09:54:47   作者:绛洞花主敏明  
这篇文章主要为大家详细介绍了Go语言中各种newreader和newbuffer的使用的相关资料,文中的示例代码讲解详细,具有一定的参考价值,感兴趣的小伙伴可以了解下

一、bytes.NewBuffer和bytes.NewReader

func main() {
    var byteArr []byte
    buf := bytes.NewBuffer(byteArr)
    buf.Write([]byte("今天不错"))
 
    fmt.Println(buf.String())
}
package main
 
import (
    "bytes"
    "fmt"
)
 
func main() {
    data := []byte("路多辛的所思所想")
    reader := bytes.NewReader(data)
 
    // 读取整个字节数组
    buf := make([]byte, len(data))
    _, err := reader.Read(buf)
    if err != nil {
        fmt.Println("Read failed:", err)
    }
    fmt.Println("Bytes read:", buf)
 
    // 读取字节切片的一部分
    part := make([]byte, 3)
    _, err = reader.Read(part)
    if err != nil {
        fmt.Println("Read failed:", err)
    }
    fmt.Println("Bytes read:", part)
 
    // 查找并读取字节切片中的某个字符
    offset, err := reader.Seek(6, 0)
    if err != nil {
        fmt.Println("Seek failed:", err)
    }
    ch, size, err := reader.ReadRune()
    if err != nil {
        fmt.Println("ReadRune failed:", err)
    }
    fmt.Printf("Read %c with size %d at offset %d\n", ch, size, offset)
}

二、strings.NewReader(没有newWriter)

    r := strings.NewReader("abcdefghijklmn")
    fmt.Println(r.Len())   // 输出14  初始时,未读长度等于字符串长度
    var buf []byte
    buf = make([]byte, 5)
    readLen, err := r.Read(buf)
    fmt.Println("读取到的长度:", readLen) //读取到的长度5
    if err != nil {
        fmt.Println("错误:", err)
    }
    fmt.Println(buf)            //adcde
    fmt.Println(r.Len())        //9   读取到了5个 剩余未读是14-5
    fmt.Println(r.Size())       //14   字符串的长度

三、bufio.NewReader和bufio.NewWriter

package main
import (
    "fmt"
    "io"
    "os"
)
func main() {
    fmt.Println("嗨客网(www.haicoder.net)")
    fileName := "C:/haicoder.txt"
    file, err := os.Open(fileName)
    if err != nil{
        fmt.Println("Read file err, err =", err)
        return
    }
    defer file.Close()
    var chunk []byte
    buf := make([]byte, 1024)
    for{
        n, err := bufio.NewReader(buf)
        if err != nil && err != io.EOF{
            fmt.Println("read buf fail", err)
            return
        }
        //说明读取结束
        if n == 0 {
            break
        }
        //读取到最终的缓冲区中
        chunk = append(chunk, buf[:n]...)
    }
    fmt.Println("File Content =", string(chunk))
}
package main
import (
    "bufio"
    "fmt"
    "io/ioutil"
    "os"
)
func main() {
    fmt.Println("嗨客网(www.haicoder.net)")
    var(
        fileName = "C:/haicoder.txt"
        content = "Hello HaiCoder"
        file *os.File
        err error
    )
    //使用追加模式打开文件
    file, err = os.OpenFile(fileName, os.O_APPEND, 0666)
    if err != nil{
        fmt.Println("Open file err =", err)
        return
    }
    defer file.Close()
    writer := bufio.NewWriter(file)
    //写入文件
    n, err := writer.Write([]byte(content))
    if err != nil{
        fmt.Println("Write file err =", err)
        return
    }
    fmt.Println("Write file success, n =", n)
    writer.Flush()
    //读取文件
    fileContent, err := ioutil.ReadFile(fileName)
    if err != nil{
        fmt.Println("Read file err =", err)
        return
    }
    fmt.Println("Read file success =", string(fileContent))
}

总结:

1、使用的newbuffer,缓存区是用来存储内容的,并不能确定具体需要的内存大小,因此newbuffer的参数为不固定的[]byte{};

2、使用的newreader,缓存区应该是有数值的,此时是用来读取其中的内容。

到此这篇关于Go中各种newreader和newbuffer的使用总结的文章就介绍到这了,更多相关Go reader buffer内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 利用go语言实现Git 重命名远程分支  

    利用go语言实现Git 重命名远程分支  

    这篇文章主要介绍了go语言实现Git 重命名远程分支,文章基于go语言的基础展开Git 重命名远程分支的实现过程,需要的小伙伴可以参考一下,希望对你的学习有所帮助
    2022-06-06
  • Go语言基础if条件语句用法及示例详解

    Go语言基础if条件语句用法及示例详解

    这篇文章主要为大家介绍了Go语言基础if条件语句的用法及示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪
    2021-11-11
  • Golang必知必会之Go Mod命令详解

    Golang必知必会之Go Mod命令详解

    go mod可以使项目从GOPATH的强制依赖中独立出来,也就是说你的项目依赖不再需要放在在GOPATH下面了,下面这篇文章主要给大家介绍了关于Golang必知必会之Go Mod命令的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-07-07
  • 使用Go语言实现发送微信群消息

    使用Go语言实现发送微信群消息

    这篇文章主要为大家详细介绍了如何使用Go语言实现发送微信群消息,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-01-01
  • 使用GO实现Paxos共识算法的方法

    使用GO实现Paxos共识算法的方法

    这篇文章主要介绍了使用GO实现Paxos共识算法,本文给大家介绍的非常详细,对大家的学习或工作,具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-09-09
  • Go语言制作svg格式树形图的示例代码

    Go语言制作svg格式树形图的示例代码

    SVG是可伸缩矢量图形 (Scalable Vector Graphics),于2003年1月14日成为 W3C 推荐标准。本文将利用Go语言实现制作svg格式树形图,感兴趣的可以了解一下
    2022-09-09
  • Go语言实现聊天小工具的示例代码

    Go语言实现聊天小工具的示例代码

    这篇文章主要为大家详细介绍了如何利用Go语言实现聊天小工具,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-03-03
  • go语言beego框架jwt身份认证实现示例

    go语言beego框架jwt身份认证实现示例

    这篇文章主要为大家介绍了go语言beego框架jwt身份认证实现示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步早日升职加薪
    2022-04-04
  • 一文详解Go语言fmt标准库的常用占位符使用

    一文详解Go语言fmt标准库的常用占位符使用

    这篇文章主要为大家详细介绍了Go语言中fmt标准库的常用占位符及其简单使用,文中的示例代码讲解详细,对我们学习Go语言有一定的帮助,需要的可以参考一下
    2022-12-12
  • Go语言与gRPC的完美结合实战演练

    Go语言与gRPC的完美结合实战演练

    这篇文章主要介绍了Go语言与gRPC的完美结合实战演练,gRPC(Remote Procedure Call)是一种远程过程调用技术,通过压缩和序列化数据来优化网络通信,可以显著提高服务调用的性能和效率
    2024-01-01

最新评论