golang之bufio包的使用

2022-05-06 23:00:08 字數 2743 閱讀 4232

// 參考:

// bufio 包實現了帶快取的 i/o 操作

// 它封裝乙個 io.reader 或 io.writer 物件

// 使其具有快取和一些文字讀寫功能

package main

import (

"bufio"

"bytes"

"fmt"

"strings"

)func main()

func testpeek()

func testread()

func testbuffered()

s := strings.newreader("123456789")

br := bufio.newreader(s)

b := make(byte, 3)

br.read(b)

fmt.println(br.buffered()) // 6

br.read(b)

fmt.println(br.buffered()) // 3

}func testreadbyte()

fmt.printf("%q\n", tmp) // 'a'

fmt.println(br.buffered()) // 3

for i := 0; i < len(origin); i++ }}

func testunreadbyte()

func testreadrune()

fmt.printf("%q\n", tmp) // '中'

}func testunreadrune()

fmt.printf("%q\n", tmp) // '中'

br.unreadrune()

tmp, _, err = br.readrune()

if err != nil

fmt.printf("%q\n", tmp) // '中'

}func testreadline() , false, error(nil);

len(line) > 0 && err == nil;

}func testreadslice()

fmt.printf("%q\n", w) // "abc "

w, err = br.readslice(' ')

if err != nil

fmt.printf("%q\n", w) // "def "

w, err = br.readslice(' ')

if err != nil

fmt.printf("%q\n", w) // panic: eof

}func testreadbytes()

fmt.printf("%q\n", line) // "abc,"

line, err = br.readbytes(',')

if err != nil

fmt.printf("%q\n", line) // "efg,"

line, err = br.readbytes(',')

if err != nil

fmt.printf("%q\n", line)

}func testreadstring()

fmt.printf("%s\n", line) // 你好,

line, err = br.readstring(',')

if err != nil

fmt.printf("%s\n", line)

}func testwriteto()

// writer實現了為io.writer介面物件提供緩衝。

// 如果在向乙個writer型別值寫入時遇到了錯誤,

// 該物件將不再接受任何資料,返回該錯誤

// 資料都寫入後,呼叫者有義務呼叫flush方法,

// 保證所有的資料都交給了下層的io.writer。

func testnewwriter()

func testwrite()

b := bytes.newbuffer(make(byte, 0))

bw := bufio.newwriter(b)

bw.write(p[:])

bw.flush()

fmt.printf("%q\n", b)

}func testwritestring()

func testwritebyte()

func testwriterune()

fmt.println(size) // 3

bw.flush()

fmt.println(b) // 周

}func testreadfrom()

func testreadwriter()

fmt.printf("%s\n", word) // hello

_, err = rw.writestring(",i'm coming")

if err != nil

rw.flush()

fmt.println(b)

}func testnewscanner()

}func testsplit()

}func testscan()

}func testscanbytes()

}func testscanrunes()

}func testscanwords()

}func testscanlines()

}

golang中bufio包的實現原理

最近用golang寫了乙個處理檔案的指令碼,由於其中涉及到了檔案讀寫,開始使用golang中的 io 包,後來發現golang 中提供了乙個bufio的包,使用這個包可以大幅提高檔案讀寫的效率,於是在網上搜尋同樣的檔案讀寫為什麼bufio 要比io 的讀寫更快速呢?根據網上的資料和閱讀原始碼,以下來...

golang中bufio和ioutil的使用

模式 含義os.o wronly 只寫os.o create 建立檔案 os.o rdonly 唯讀os.o rdwr 讀寫os.o trunc 清空追加 func main func re defer file.close 獲取reader物件 reader bufio.newreader fil...

golang之flag包詳解

在golang中有很多方法來處理命令列引數,簡單情況下可以不使用任何庫,直接使用os.args 但是golang標準庫提供了flag包來處理命令列引數 還有第三方提供的處理命令列引數的庫cobra cli。flag包繫結解析引數有三種定義方式 flag.例如 flag.int,flag.string...