成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Golang 中的 Bytes 包詳解之 Bytes.Buffer

開(kāi)發(fā) 后端
Bytes.Buffer 實(shí)現(xiàn)了 io.Writer、io.Reader、io.ByteScanner、io.RuneScanner、io.WriterTo、io.ByteWriter 和 io.ReaderFrom 等接口,可以很方便地實(shí)現(xiàn)對(duì)字節(jié)數(shù)據(jù)的讀寫(xiě)和操作。

Golang 中的 bytes 包是其中一個(gè) IO 操作標(biāo)準(zhǔn)庫(kù),實(shí)現(xiàn)了對(duì)字節(jié)切片([]byte)的操作,提供了類(lèi)似于 strings 包的功能。本文先講解一下 bytes 包中的結(jié)構(gòu)體 bytes.Buffer。

bytes.Buffer

bytes.Buffer 實(shí)現(xiàn)了 io.Writer、io.Reader、io.ByteScanner、io.RuneScanner、io.WriterTo、io.ByteWriter 和 io.ReaderFrom 等接口,可以很方便地實(shí)現(xiàn)對(duì)字節(jié)數(shù)據(jù)的讀寫(xiě)和操作。主要特點(diǎn)是提供了一個(gè)緩沖區(qū),可以在內(nèi)存中動(dòng)態(tài)分配緩沖區(qū),以高效地寫(xiě)入和讀取字節(jié)數(shù)據(jù)。在處理數(shù)據(jù)時(shí),特別是數(shù)據(jù)拼接操作時(shí),效率往往比直接使用字符串拼接要高很多。結(jié)構(gòu)體定義和對(duì)應(yīng)的方法如下:

type Buffer struct {
	buf      []byte // contents are the bytes buf[off : len(buf)]
	off      int    // read at &buf[off], write at &buf[len(buf)]
	lastRead readOp // last read operation, so that Unread* can work correctly.
}

其中,buf 保存了實(shí)際的字節(jié)緩存,off 表示下一個(gè)讀寫(xiě)操作的偏移量,lastRead 表示最后一次讀取操作的類(lèi)型和大小。

bytes.Buffer 提供的主要方法包括:

  • ReadFrom,從 io.Reader 中讀取數(shù)據(jù),并寫(xiě)入到緩沖區(qū)中。
  • WriteTo,從緩沖區(qū)中讀取數(shù)據(jù),并寫(xiě)入到 io.Writer 中。
  • WriteByte、WriteRune、WriteString,分別用于將單個(gè)字節(jié)、Unicode 字符和字符串寫(xiě)入緩沖區(qū)中。
  • ReadByte、ReadRune、ReadString,分別用于從緩沖區(qū)中讀取單個(gè)字節(jié)、Unicode 字符和字符串。
  • Bytes、String,返回緩沖區(qū)中的字節(jié)切片和字符串。
  • Reset,用于重置緩沖區(qū),將其擴(kuò)容為默認(rèn)大小(64 字節(jié))。

其他方法就不一一說(shuō)明了,最好自己去看去使用去體會(huì)。

使用示例

簡(jiǎn)單使用示例如下:

package main

import (
	"bytes"
	"encoding/binary"
	"fmt"
	"io"
	"os"
)

func main() {
	var buf bytes.Buffer

	// 寫(xiě)入一個(gè)字節(jié)
	err := buf.WriteByte('a')
	if err != nil {
		fmt.Println(err)
		return
	}

	// 寫(xiě)入一個(gè)字符串
	_, err = buf.WriteString("b")
	if err != nil {
		fmt.Println(err)
		return
	}

	// 寫(xiě)入一個(gè)無(wú)符號(hào)整數(shù)
	var u uint32 = 12345
	err = binary.Write(&buf, binary.LittleEndian, u)
	if err != nil {
		fmt.Println(err)
		return
	}

	// 讀取一個(gè)字節(jié)
	b, err := buf.ReadByte()
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Println(string(b)) // a

	// 讀取一個(gè)字符串
	s, err := buf.ReadString('\n')
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Println(s) // b

	// 讀取無(wú)符號(hào)整數(shù)
	var u2 uint32
	err = binary.Read(&buf, binary.LittleEndian, &u2)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Println(u2) // 12345

	// 拷貝到標(biāo)準(zhǔn)輸出中
	_, err = io.Copy(os.Stdout, &buf)
	if err != nil {
		fmt.Println(err)
		return
	}

	// 讀取到 []byte 中,并以字符串輸出
	data, err := io.ReadAll(&buf)
	if err != nil {
		fmt.Println(err)
		return
	}
	fmt.Println(string(data))
}

首先創(chuàng)建了一個(gè) bytes.Buffer 對(duì)象 buf,分別使用 WriteByte、WriteString 和 binary.Write 方法向緩沖區(qū)中寫(xiě)入一個(gè)字節(jié)、一個(gè)字符串和一個(gè)無(wú)符號(hào)整數(shù)。然后分別使用 ReadByte、ReadString 和 binary.Read 方法從緩沖區(qū)中讀取了一個(gè)字節(jié)、一個(gè)字符串和一個(gè)無(wú)符號(hào)整數(shù)。接下來(lái)使用 io.Copy 方法和 os.Stdout 將緩沖區(qū)中的數(shù)據(jù)拷貝到標(biāo)準(zhǔn)輸出中,最后使用 io.ReadAll 方法將緩沖區(qū)中的所有數(shù)據(jù)讀取到一個(gè)字節(jié)切片中,并轉(zhuǎn)換為一個(gè)字符串。

小結(jié)

使用 bytes.Buffer 可以方便高效地處理字節(jié)數(shù)據(jù),避免頻繁地對(duì)底層的字節(jié)數(shù)組進(jìn)行擴(kuò)容和復(fù)制,從而提高性能。

責(zé)任編輯:姜華 來(lái)源: 今日頭條
相關(guān)推薦

2023-11-27 15:02:37

BytesGolang

2023-10-18 08:22:38

BufioGolang

2023-09-05 08:22:44

Golangstrings 包

2023-10-10 08:57:44

Golangbufio

2023-10-07 09:08:32

Golangbufio

2023-09-06 09:10:04

Golang字符串

2023-09-07 07:35:54

GolangBufio

2023-09-04 08:17:37

Golangstrings 包

2023-08-03 08:48:07

Golang接口

2023-12-11 08:39:14

Go語(yǔ)言字符串拼

2023-08-02 09:07:27

Golangio 包

2023-08-31 09:28:12

Golang可導(dǎo)出函數(shù)

2023-05-12 09:40:53

ContextGolang

2024-01-18 09:07:04

Errors函數(shù)Golang

2023-08-28 17:16:51

Golangio 包

2023-11-03 08:53:15

StrconvGolang

2023-11-13 21:55:12

Go編程

2023-08-08 14:51:29

2023-05-15 08:50:58

ContextGolang

2023-10-24 16:03:34

GoGolang
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 蜜桃视频在线观看www社区 | 青青草网站在线观看 | 91精品国产91| 亚洲一区国产 | 欧美日韩三级视频 | 久久99视频免费观看 | 欧美亚州 | av夜夜操 | 91电影 | 美女人人操 | 亚洲成av人影片在线观看 | 96av麻豆蜜桃一区二区 | 嫩草视频在线免费观看 | 精品一区二区三区在线观看国产 | 国产精品日产欧美久久久久 | 国产第一页在线播放 | 国产精品精品久久久 | 狠狠躁躁夜夜躁波多野结依 | 狠狠综合网 | 美女久久 | 成年人免费网站 | 亚洲国产一区在线 | 粉嫩粉嫩芽的虎白女18在线视频 | 欧美日日日日bbbbb视频 | 久久91精品久久久久久9鸭 | 精品一区二区三区在线观看国产 | 黄色免费在线观看 | 欧美一级视频免费看 | 毛片入口| 国产福利91精品一区二区三区 | 91精品国产综合久久久久久丝袜 | 国产999精品久久久久久 | 日韩成人在线播放 | 精品日韩 | 国产成人影院 | 久久久久久久av麻豆果冻 | 91久久精品| 在线不卡一区 | 久久久激情视频 | 国产亚洲精品91 | 久久国产精品免费一区二区三区 |