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

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

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

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

io.ByteReader

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

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

标准库中的 bufio.Reader 实现了该接口,从一个 io.Reader 中读取并提供带缓存的读取方法,简单示例如下:Uio28资讯网——每日最新资讯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 时返回的同一个字节。Uio28资讯网——每日最新资讯28at.com

io.ByteWriter

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

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

标准库中的 bufio.Writer 实现了该接口,从字节序列中构造并提供缓冲输出,简单示例如下:Uio28资讯网——每日最新资讯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 以及错误类型。Uio28资讯网——每日最新资讯28at.com

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

io.StringWriter

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

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

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

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

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

下一篇: 低碳 Web 实践指南

标签:
  • 热门焦点
  • 小米官宣:2023年上半年出货量中国第一!

    今日早间,小米电视官方微博带来消息,称2023年小米电视上半年出货量达到了中国第一,同时还表示小米电视的巨屏风暴即将开始。“公布一个好消息2023年#小米电视上半年出货量中国
  • 三言两语说透设计模式的艺术-单例模式

    写在前面单例模式是一种常用的软件设计模式,它所创建的对象只有一个实例,且该实例易于被外界访问。单例对象由于只有一个实例,所以它可以方便地被系统中的其他对象共享,从而减少
  • 重估百度丨“晚熟”的百度云,能等到春天吗?

    ©自象限原创作者|程心排版|王喻可2016年7月13日,百度云计算战略发布会在北京举行,宣告着百度智能云的正式启程。彼时的会场座无虚席,甚至排队排到了门外,在场的所有人几乎都
  • 腾讯盖楼,字节拆墙

    来源 | 光子星球撰文 | 吴坤谚编辑 | 吴先之“想重温暴刷深渊、30+技能搭配暴搓到爽的游戏体验吗?一起上晶核,即刻暴打!”曾凭借直播腾讯旗下代理格斗游戏《DNF》一
  • 腾讯VS网易,最卷游戏暑期档,谁能笑到最后?

    作者:无锈钵来源:财经无忌7月16日晚,上海1862时尚艺术中心。伴随着幻象的精准命中,硕大的荧幕之上,比分被定格在了14:12,被寄予厚望的EDG战队以绝对的优势战胜了BLG战队,拿下了总决
  • 一条抖音4亿人围观 ! 这家MCN比无忧传媒还野

    作者:Hiu 来源:互联网品牌官01 擦边少女空降热搜,幕后推手曝光被网友誉为“纯欲天花板”的女网红井川里予,近期因为一组哥特风照片登上热搜,引发了一场互联网世界关于
  • Android 14发布:首批适配机型公布

    5月11日消息,谷歌在今天凌晨举行了I/O大会,本次发布会谷歌带来了自家的AI语言模型PaLM 2、谷歌Pixel Fold折叠屏、谷歌Pixel 7a手机,同时发布了Androi
  • 朋友圈可以修改可见范围了 苹果用户可率先体验

    近日,iOS用户迎来微信8.0.27正式版更新,除了可更换二维码背景外,还新增了多项实用功能。在新版微信中,朋友圈终于可以修改可见范围,简单来说就是已发布的朋友圈
  • SN570 NVMe SSD固态硬盘 价格与性能兼具

    SN570 NVMe SSD固态硬盘是西部数据发布的最新一代WD Blue系列的固态硬盘,不仅闪存技术更为精进,性能也得到了进一步的跃升。WD Blue SN570 NVMe SSD的包装外
Top