日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

Golang 中的 IO 包詳解:單字節操作接口

來源: 責編: 時間:2023-08-09 23:02:44 324觀看
導讀io.ByteReadertype ByteReader interface { ReadByte() (byte, error)}定義了一個基本方法 ReadByte,用于讀取數據源中的單個字節,如果沒有字節可讀,返回非 nil 的錯誤。標準庫中的 bufio.Reader 實現了該接口,從一個 io.

fPC28資訊網——每日最新資訊28at.com

io.ByteReader

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

定義了一個基本方法 ReadByte,用于讀取數據源中的單個字節,如果沒有字節可讀,返回非 nil 的錯誤。fPC28資訊網——每日最新資訊28at.com

標準庫中的 bufio.Reader 實現了該接口,從一個 io.Reader 中讀取并提供帶緩存的讀取方法,簡單示例如下:fPC28資訊網——每日最新資訊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 時返回的同一個字節。fPC28資訊網——每日最新資訊28at.com

io.ByteWriter

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

定義了一個基本方法 ReadByte,用于向數據源中寫入單個字節的能力,fPC28資訊網——每日最新資訊28at.com

標準庫中的 bufio.Writer 實現了該接口,從字節序列中構造并提供緩沖輸出,簡單示例如下:fPC28資訊網——每日最新資訊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 以及錯誤類型。fPC28資訊網——每日最新資訊28at.com

io.RuneReader 通常與 bufio.Reader 一起使用,用于構建高效的文本讀取器。例如如下示例,使用 bufio.Reader 讀取一個文件并逐行解析其中的 Unicode 碼點:fPC28資訊網——每日最新資訊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。簡單示例如下:fPC28資訊網——每日最新資訊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。fPC28資訊網——每日最新資訊28at.com

io.StringWriter

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

定義了一個基本方法 WriteString,用來將數據寫入一個字符串。簡單示例如下:fPC28資訊網——每日最新資訊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。fPC28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-5145-0.htmlGolang 中的 IO 包詳解:單字節操作接口

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

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

下一篇: 低碳 Web 實踐指南

標簽:
  • 熱門焦點
Top 主站蜘蛛池模板: 区。| 岐山县| 泽普县| 恩平市| 建平县| 溧阳市| 昭通市| 满城县| 罗平县| 贵州省| 临江市| 新乡市| 九龙城区| 大埔县| 宁晋县| 南华县| 蚌埠市| 北流市| 五台县| 扬州市| 乐山市| 玛纳斯县| 鱼台县| 巴里| 永嘉县| 湘潭市| 黔西县| 万源市| 辉县市| 五大连池市| 潞西市| 福清市| 泾阳县| 乐安县| 锦州市| 遵化市| 惠安县| 井研县| 鸡泽县| 丰城市| 云龙县|