Go中各種newreader和newbuffer的使用總結
更新時間:2023年11月21日 09:54:47 作者:絳洞花主敏明
這篇文章主要為大家詳細介紹了Go語言中各種newreader和newbuffer的使用的相關資料,文中的示例代碼講解詳細,具有一定的參考價值,感興趣的小伙伴可以了解下
一、bytes.NewBuffer和bytes.NewReader
func main() { var byteArr []byte buf := bytes.NewBuffer(byteArr) buf.Write([]byte("今天不錯")) fmt.Println(buf.String()) }
package main import ( "bytes" "fmt" ) func main() { data := []byte("路多辛的所思所想") reader := bytes.NewReader(data) // 讀取整個字節(jié)數(shù)組 buf := make([]byte, len(data)) _, err := reader.Read(buf) if err != nil { fmt.Println("Read failed:", err) } fmt.Println("Bytes read:", buf) // 讀取字節(jié)切片的一部分 part := make([]byte, 3) _, err = reader.Read(part) if err != nil { fmt.Println("Read failed:", err) } fmt.Println("Bytes read:", part) // 查找并讀取字節(jié)切片中的某個字符 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 []byte buf = make([]byte, 5) readLen, err := r.Read(buf) fmt.Println("讀取到的長度:", readLen) //讀取到的長度5 if err != nil { fmt.Println("錯誤:", err) } fmt.Println(buf) //adcde fmt.Println(r.Len()) //9 讀取到了5個 剩余未讀是14-5 fmt.Println(r.Size()) //14 字符串的長度
三、bufio.NewReader和bufio.NewWriter
package main import ( "fmt" "io" "os" ) func main() { fmt.Println("嗨客網(wǎng)(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 []byte buf := 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 } //讀取到最終的緩沖區(qū)中 chunk = append(chunk, buf[:n]...) } fmt.Println("File Content =", string(chunk)) }
package main import ( "bufio" "fmt" "io/ioutil" "os" ) func main() { fmt.Println("嗨客網(wǎng)(www.haicoder.net)") var( fileName = "C:/haicoder.txt" content = "Hello HaiCoder" file *os.File err 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,緩存區(qū)是用來存儲內(nèi)容的,并不能確定具體需要的內(nèi)存大小,因此newbuffer的參數(shù)為不固定的[]byte{};
2、使用的newreader,緩存區(qū)應該是有數(shù)值的,此時是用來讀取其中的內(nèi)容。
到此這篇關于Go中各種newreader和newbuffer的使用總結的文章就介紹到這了,更多相關Go reader buffer內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
關于golang?struct?中的?slice?無法原子賦值的問題
這篇文章主要介紹了為什么?golang?struct?中的?slice?無法原子賦值的問題,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2024-01-01