当前位置:首页 > 科技  > 软件

Golang 中的 IO 包详解:单字节操作接口

来源: 责编: 时间:2023-08-09 23:02:44 497观看
导读io.ByteReadertype ByteReader interface { ReadByte() (byte, error)}定义了一个基本方法 ReadByte,用于读取数据源中的单个字节,如果没有字节可读,返回非 nil 的错误。标准库中的 bufio.Reader 实现了该接口,从一个 io.

b3D28资讯网——每日最新资讯28at.com

io.ByteReader

type ByteReader interface {	ReadByte() (byte, error)}

定义了一个基本方法 ReadByte,用于读取数据源中的单个字节,如果没有字节可读,返回非 nil 的错误。b3D28资讯网——每日最新资讯28at.com

标准库中的 bufio.Reader 实现了该接口,从一个 io.Reader 中读取并提供带缓存的读取方法,简单示例如下:b3D28资讯网——每日最新资讯28at.com

package mainimport (	"bufio"	"fmt"	"strings")func main() {	data := "abc123"	reader := bufio.NewReader(strings.NewReader(data))	for {		c, err := reader.ReadByte()		if err != nil {			break		}		fmt.Print(string(c))	}}

io.ByteScanner

type ByteScanner interface {	ByteReader	UnreadByte() error}

是 io.ByteReader 接口的扩展,提供了一个额外的方法:UnreadByte,UnreadByte方法让下一次调用 ReadByte 时返回之前调用 ReadByte 时返回的同一个字节。b3D28资讯网——每日最新资讯28at.com

io.ByteWriter

// ByteWriter is the interface that wraps the WriteByte method.type ByteWriter interface {	WriteByte(c byte) error}

定义了一个基本方法 ReadByte,用于向数据源中写入单个字节的能力,b3D28资讯网——每日最新资讯28at.com

标准库中的 bufio.Writer 实现了该接口,从字节序列中构造并提供缓冲输出,简单示例如下:b3D28资讯网——每日最新资讯28at.com

package mainimport (	"bufio"	"bytes"	"fmt")func main() {	buf := new(bytes.Buffer)	writer := bufio.NewWriter(buf)	for _, c := range "abc123" {		err := writer.WriteByte(byte(c))		if err != nil {			panic(err)		}	}	writer.Flush()	fmt.Println(buf.String())}

io.RuneReader

type RuneReader interface {	ReadRune() (r rune, size int, err error)}

用于从字符流中读取 Unicode 码点(Rune),定义了一个基本方法 ReadRune,接受一个参数类型为 rune 的指针,并返回读取的 Rune 以及错误类型。b3D28资讯网——每日最新资讯28at.com

io.RuneReader 通常与 bufio.Reader 一起使用,用于构建高效的文本读取器。例如如下示例,使用 bufio.Reader 读取一个文件并逐行解析其中的 Unicode 码点:b3D28资讯网——每日最新资讯28at.com

package mainimport (	"bufio"	"fmt"	"io"	"log"	"os")func main() {	file, _ := os.Open("file.txt")	defer file.Close()	reader := bufio.NewReader(file)	for {		r, _, err := reader.ReadRune()		if err != nil {			if err == io.EOF {				break			}			log.Fatal(err)		}		if r == '/n' {			fmt.Println()		} else {			fmt.Print(r)		}	}}

io.RuneScanner

type RuneScanner interface {	RuneReader	UnreadRune() error}

扩展了 io.RuneReader 接口,添加了一个名为 UnreadRune 的方法,用于撤消最近读取的 Rune,并使下一次读取的时候再次返回该 Rune。简单示例如下:b3D28资讯网——每日最新资讯28at.com

package mainimport (	"bufio"	"fmt"	"io"	"log"	"os"	"strings")func main() {	scanner := bufio.NewScanner(os.Stdin)	for {		if ok := scanner.Scan(); !ok {			break		}		str := scanner.Text()		reader := strings.NewReader(str)		for {			runeScanner := bufio.NewReader(reader)			r, _, err := runeScanner.ReadRune()			if err != nil {				if err == io.EOF {					break				}				log.Fatal(err)			}			fmt.Printf("%#U/n", r)		}	}}

使用 bufio.Scanner 从控制台读取每一行输入,然后将每一行转换为一个 strings.Reader,并将其传递给 bufio.NewReader 来扫描 Rune。b3D28资讯网——每日最新资讯28at.com

io.StringWriter

// StringWriter is the interface that wraps the WriteString method.type StringWriter interface {	WriteString(s string) (n int, err error)}

定义了一个基本方法 WriteString,用来将数据写入一个字符串。简单示例如下:b3D28资讯网——每日最新资讯28at.com

package mainimport (	"fmt"	"io"	"strings")func main() {	var builder strings.Builder	writer := io.StringWriter(&builder)	writer.WriteString("Hello, ")	writer.WriteString("World!")	result := builder.String()	fmt.Println(result) // 输出:Hello, World!}

首先创建了一个 strings.Builder,然后使用 io.StringWriter 将 builder 转换为一个 io.Writer,最后使用 builder.String 将最终结果转换为一个 string。b3D28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-5145-0.htmlGolang 中的 IO 包详解:单字节操作接口

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 浅析 Parcel 的 Rust 打包算法 Demo

下一篇: 低碳 Web 实践指南

标签:
  • 热门焦点
  • 摸鱼心法第一章——和配置文件说拜拜

    为了能摸鱼我们团队做了容器化,但是带来的问题是服务配置文件很麻烦,然后大家在群里进行了“亲切友好”的沟通图片图片图片图片对比就对比,简单对比下独立配置中心和k8s作为配
  • K8S | Service服务发现

    一、背景在微服务架构中,这里以开发环境「Dev」为基础来描述,在K8S集群中通常会开放:路由网关、注册中心、配置中心等相关服务,可以被集群外部访问;图片对于测试「Tes」环境或者
  • 得物效率前端微应用推进过程与思考

    一、背景效率工程随着业务的发展,组织规模的扩大,越来越多的企业开始意识到协作效率对于企业团队的重要性,甚至是决定其在某个行业竞争中突围的关键,是企业长久生存的根本。得物
  • 三万字盘点 Spring 九大核心基础功能

    大家好,我是三友~~今天来跟大家聊一聊Spring的9大核心基础功能。话不多说,先上目录:图片友情提示,本文过长,建议收藏,嘿嘿嘿!一、资源管理资源管理是Spring的一个核心的基础功能,不
  • 自动化在DevOps中的力量:简化软件开发和交付

    自动化在DevOps中扮演着重要角色,它提升了DevOps的效能。通过自动化工具和方法,DevOps团队可以实现以下目标:消除手动和重复性任务。简化流程。在整个软件开发生命周期中实现更
  • 使用Webdriver-manager解决浏览器与驱动不匹配所带来自动化无法执行的问题

    1、前言在我们使用 Selenium 进行 UI 自动化测试时,常常会因为浏览器驱动与浏览器版本不匹配,而导致自动化测试无法执行,需要手动去下载对应的驱动版本,并替换原有的驱动,可能还
  • 慕岩炮轰抖音,百合网今何在?

    来源:价值研究所 作者:Hernanderz“难道就因为自己的一个产品牛逼了,从客服到总裁,都不愿意正视自己产品和运营上的问题,选择逃避了吗?”这一番话,出自百合网联合创
  • 苹果、三星、惠普等暂停向印度出口笔记本和平板电脑

    集微网消息,据彭博社报道,在8月3日印度突然禁止在没有许可证的情况下向印度进口电脑/平板及显示器等产品后,苹果、三星电子和惠普等大公司暂停向印度
  • 三星折叠屏手机去年销售近1000万台 今年目标定为1500万

    7月29日消息,三星率先发力可折叠手机市场,在全球市场已经取得了非常亮眼的成绩,接下来会进一步巩固和扩大这一优势。三星在推出Galaxy Z Flip5和Galax
Top