当前位置: 首页 > news >正文

Go中各种newreader和newbuffer的使用

一、bytes.NewBuffer和bytes.NewReader

func main() {var byteArr []bytebuf := bytes.NewBuffer(byteArr)buf.Write([]byte("今天不错"))fmt.Println(buf.String())
}
package mainimport ("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 []bytebuf = make([]byte, 5)readLen, err := r.Read(buf)fmt.Println("读取到的长度:", readLen) //读取到的长度5if err != nil {fmt.Println("错误:", err)}fmt.Println(buf)            //adcdefmt.Println(r.Len())        //9   读取到了5个 剩余未读是14-5fmt.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 []bytebuf := 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.Fileerr 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,缓存区应该是有数值的,此时是用来读取其中的内容。

http://www.lryc.cn/news/239539.html

相关文章:

  • visual studio 如何建立 C 语言项目
  • app小程序定制开发的优势|企业软件网站建设
  • 物联网AI MicroPython学习之语法 WDT看门狗外设
  • JVM线程的几种状态
  • 基于单片机停车场环境监测系统仿真设计
  • 每日一题:LeetCode-589.N叉树的前序遍历
  • PTA 7-2 简单计算器
  • 9、鸿蒙应用桌面图标外观和国际化
  • oracle rac 19c修改不同网段public ip
  • 【Django-DRF用法】多年积累md笔记,第(4)篇:Django-DRF反序列化详解
  • OpenAI宣布暂停ChatGPT plus用户订阅,解决方案,无需等待立马升级
  • 如何将 Docsify 项目部署到 CentOS 系统的 Nginx 中
  • 小程序存在优惠卷遍历,但是歪了
  • HarmonyOS第一课-对比Kotlin,快速入门TypeScript
  • 【自动驾驶】一些业内自动驾驶专业术语释义
  • 好用的博客评论系统 Valine 使用及避坑指南
  • 【Mysql】[Err] 1293 - Incorrect table definition;
  • SpringBoot——日志及原理
  • 7种SQL的进阶用法
  • Unity--互动组件(Scrollbar)||Unity--互动组件(DropDown )
  • Unity、UE和Godot的优劣对比
  • CMAK Kafka可视化管理工具
  • PHP如何持续监听Redis的消息订阅并推送到前端?
  • php项目从宝塔面板切换转到phpstudy小皮面板
  • 基于Acconeer的A121-60GHz毫米波雷达传感器SDK移植及测距示例(STM32L496为例)
  • flink1.10袋鼠云 迁移 flink1.15原生环境 事项汇总
  • 鸿蒙:Harmony开发基础知识详解
  • java_函数式接口
  • 解决selenium访问网页中多个iframe,导致无法锁定元素的问题
  • MySQL大表设计