国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院

首頁(yè) > 專題 > 區(qū)塊鏈 > 正文

區(qū)塊鏈開發(fā)中Go語(yǔ)言之IO操作

2020-02-25 19:26:52
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

這篇文章是對(duì)區(qū)塊鏈開發(fā)中Go語(yǔ)言之IO操作做一個(gè)梳理,每一個(gè)的地方,每一種的知識(shí),每一種事物,都是從陌生到熟悉。在這個(gè)過(guò)程里面,或許能開闊眼界,增長(zhǎng)見識(shí),體驗(yàn)樂(lè)趣,下面我們就一起來(lái)看看吧。

io,最基本的io

Reader

type Reader interface {    Read(p []byte) (n int, err error)}

實(shí)現(xiàn)了Reader接口的都可以用read方法,將數(shù)據(jù)讀入到p字節(jié)數(shù)組,n表示讀取了幾個(gè)字節(jié),err返回錯(cuò)誤。 如果讀到了文件尾EOF,則err返回EOF。
注意,當(dāng)文件最后一小段已經(jīng)無(wú)法填滿p這個(gè)字節(jié)數(shù)組時(shí),不會(huì)產(chǎn)生EOF的錯(cuò)誤,只會(huì)在下一次讀取時(shí)產(chǎn)生n=0,err=io.EOF的錯(cuò)誤

舉例

func main() {    file, _ := os.Open("main.go")    var a [128]byte    count:=0    for {        n, err := file.Read(a[:])        count+=1        if err != nil {            if err == io.EOF {                break            } else {                os.Exit(1)            }        }        fmt.Printf("%s/n", a[:n])    }    fmt.Printf("%d/n", count)}

Writer

type Writer interface {    Write(p []byte) (n int, err error)}

Write 將 len(p) 個(gè)字節(jié)從 p 中寫入到基本數(shù)據(jù)流中。它返回從 p 中被寫入的字節(jié)數(shù) n(0 常見錯(cuò)誤原因有磁盤滿了

ReaderAt 和 WriterAt 接口

和Reader,Writer類似,但是需要自己調(diào)控偏移量。
注意:接近文件尾巴時(shí),當(dāng)n小于數(shù)組大小時(shí)也觸發(fā)了err.EOF,需要自行把最后n小于數(shù)組大小的這點(diǎn)數(shù)據(jù)處理一下。

舉例:

func main() {    file, _ := os.Open("main.go")    var a [128]byte    count := 0    var pos int64 = 0    for {        n, err := file.ReadAt(a[:], pos)        count += 1        pos += int64(n)        if err != nil {            if err == io.EOF {                fmt.Printf("%s", a[:n]) //區(qū)別在這里                break            } else {                os.Exit(1)            }        }        fmt.Printf("%s", a[:n])    }    fmt.Println()    fmt.Printf("%d", count)}

ReaderFrom 和 WriterTo 接口

一次性讀完直到EOF,或者寫入全部數(shù)據(jù)

Seeker 接口

type Seeker interface {    Seek(offset int64, whence int) (ret int64, err error)}

用來(lái)設(shè)置偏移量,也就是從哪開始讀,offset由whence解釋。

  • 0 表示相對(duì)于文件的起始處
  • 1 表示相對(duì)于當(dāng)前的偏移,
  • 2 表示相對(duì)于其結(jié)尾處。

ByteReader 和 ByteWriter

讀或?qū)懸粋€(gè)字節(jié)

ioutil — 方便的IO操作函數(shù)集

ReadAll

一次性讀取數(shù)據(jù)

ReadDir

讀取目錄并返回排好序的文件和子目錄名

ReadFile 和 WriteFile

func WriteFile(filename string, data []byte, perm os.FileMode) error

這里特別注意的是寫文件的權(quán)限問(wèn)題,perm的數(shù)值,和linux規(guī)則一致 四位(777):

模式

數(shù)字

rwx

7

rw-

6

r-x

5

r--

4

-wx

3

-w-

2

--x

1

---

0

組合如0666,表示rw-rw-rw-

?

bufio,帶緩存的io

是io庫(kù)的包裝,提供帶緩存的方法

ReadSlice、ReadBytes、ReadString 和 ReadLine 方法

后三個(gè)方法最終都是調(diào)用ReadSlice來(lái)實(shí)現(xiàn)的

ReadSlice
func (b *Reader) ReadSlice(delim byte) (line []byte, err error)

示例:

reader := bufio.NewReader(strings.NewReader("http://studygolang.com. /nIt is the home of gophers"))line, _ := reader.ReadSlice('/n')fmt.Printf("the line:%s/n", line)// 這里可以換上任意的 bufio 的 Read/Write 操作n, _ := reader.ReadSlice('/n')fmt.Printf("the line:%s/n", line)fmt.Println(string(n))

輸出:

the line:http://studygolang.com. the line:It is the home of gophersIt is the home of gophers

注意ReadSlice每次返回的line是指向同一個(gè)緩存數(shù)組,因此ReadSlice的實(shí)現(xiàn)是反復(fù)覆蓋重寫緩存數(shù)組。

如果ReadSlice在找到分界符前

  1. 緩存數(shù)組就滿了,則返回bufio.ErrBufferFull
  2. 遇到EOF了,則返回ErrEOF
ReadBytes
func (b *Reader) ReadBytes(delim byte) (line []byte, err error)

返回的byte是copy的一份數(shù)組

從以下實(shí)驗(yàn)可看出來(lái)

reader := bufio.NewReader(strings.NewReader("http://studygolang.com. /nIt is the home of gophers"))line, _ := reader.ReadBytes('/n')fmt.Printf("the line:%s/n", line)// 這里可以換上任意的 bufio 的 Read/Write 操作n, _ := reader.ReadBytes('/n')fmt.Printf("the line:%s/n", line)fmt.Println(string(n))

輸出

the line:http://studygolang.com. the line:http://studygolang.com. It is the home of gophers
ReadString

是對(duì)ReadBytes的封裝,將返回的line轉(zhuǎn)換成string

ReadLine
func (b *Reader) ReadLine() (line []byte, isPrefix bool, err error)

這里要說(shuō)的是isPrefix,用于讀取的一行超過(guò)了緩存大小,則isPrefix為true,下次還讀這行余下的部分,直到讀完這行才isPrefix返回false

ReadLine返回的文本不會(huì)包含行結(jié)尾("/r/n"或者"/n")

Peek

該方法只是“窺探”一下Reader中沒(méi)有讀取的n個(gè)字節(jié)。好比棧數(shù)據(jù)結(jié)構(gòu)中的取棧頂元素,但不出棧。

func (b *Reader) Peek(n int) ([]byte, error)

同上面介紹的ReadSlice一樣,返回的[]byte只是buffer中的引用。所以在并發(fā)的時(shí)候有可能就被別人給改了

Scanner 類型和方法

用于方便的按token讀取數(shù)據(jù),token的分詞規(guī)則用SplitFunc定義。默認(rèn)按行分詞,會(huì)去掉末尾換行符。 了解Scanner前要先了解SplitFunc

SplitFunc
type SplitFunc func(data []byte, atEOF bool) (advance int, token []byte, err error)

SplitFunc 定義了 用于對(duì)輸入進(jìn)行分詞的 split 函數(shù)的簽名。

參數(shù)

  1. data 是還未處理的數(shù)據(jù),
  2. atEOF 標(biāo)識(shí) Reader是否還有更多數(shù)據(jù)(是否到了EOF)。

返回值

  1. advance data里下一個(gè)token開始位置
  2. token 表示當(dāng)前token的結(jié)果數(shù)據(jù)
  3. err 則代表可能的錯(cuò)誤。

舉例

func main() {    // Comma-separated list; last entry is empty.    const input = "1,2,3,4,"    scanner := bufio.NewScanner(strings.NewReader(input))    // Define a split function that separates on commas.    onComma := func(data []byte, atEOF bool) (advance int, token []byte, err error) {        for i := 0; i 

輸出

"1" "2" "3" "4" "5"

你也可以用系統(tǒng)定義好的幾個(gè)分割token的方法。


  1. ScanBytes 返回單個(gè)字節(jié)作為一個(gè) token。
    ?

  2. ScanRunes 返回單個(gè) UTF-8 編碼的 rune 作為一個(gè) token。返回的 rune 序列(token)和 range string類型 返回的序列是等價(jià)的,也就是說(shuō),對(duì)于無(wú)效的 UTF-8 編碼會(huì)解釋為 U+FFFD = "/xef/xbf/xbd"。
    ?

  3. ScanWords 返回通過(guò)“空格”分詞的單詞。如:study golang,調(diào)用會(huì)返回study。注意,這里的“空格”是 unicode.IsSpace(),即包括:'/t', '/n', '/v', '/f', '/r', ' ', U+0085 (NEL), U+00A0 (NBSP)。
    ?

  4. ScanLines 返回一行文本,不包括行尾的換行符。這里的換行包括了Windows下的"/r/n"和Unix下的"/n"。
    ?
Scanner 的使用方法
  1. NewScanner
  2. Split設(shè)置分割token的方法
  3. 循環(huán)scanner.Scan()
  4. 在循環(huán)里用scanner.Text()取token 示例
const input = "This is The Golang Standard Library./nWelcome you!"scanner := bufio.NewScanner(strings.NewReader(input))scanner.Split(bufio.ScanWords)count := 0for scanner.Scan() {    count++}if err := scanner.Err(); err != nil {    fmt.Fprintln(os.Stderr, "reading input:", err)}fmt.Println(count)

Writer

帶緩存的writer,記得在最終的寫入操作執(zhí)行完后flush一下,確保全部緩存都真正寫入,如果大家想了解更多精彩內(nèi)容,盡在https://js.Vevb.com。

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
国产激情自拍_国产9色视频_丁香花在线电影小说观看 _久久久久国产精品嫩草影院
天天草天天爽| 中文字幕毛片| 国产日产一区二区三区| 国产在线视精品麻豆| 亚洲精品少妇久久久久久| 亚洲国产成人综合| 青青久草在线| 国产一级网站视频在线| 精品国产一区二区三区不卡在线| 伊人222成人综合网| 热99re久久精品这里都是免费| wwww亚洲| 国产无套粉嫩白浆在线2022年 | 一本大道久久精品| 亚洲欧洲成人| 大香伊人久久| 伊人影院在线观看| 久久精品国产亚洲777| 国产丝袜在线| 麻豆国产在线播放| 国产福利在线看| 亚洲成人电视网| 99热最新网址| 午夜在线不卡| 国产一二三在线观看| 国产极品一区二区三区| 欧美日韩性视频一区二区三区| 丁香花在线电影小说观看| 精品欧美日韩一区二区| 女人色在线免费视频| 国产精品爱久久久久久久小说| 夜夜爽视频导航| 国产系列电影在线播放网址| www.色婷婷| 精品极品三级久久久久| 国产免费黄网站| www在线视频观看| 91精选福利| 国产高清视频在线观看| 交视频在线观看国产| 99久久99热久久精品免费看| 中文字幕在线观看播放| 黄色毛片在线观看| 人日人天天爽| sm国产在线调教视频| 一级黄色av| 日本在线天堂| 欧美婷婷久久五月精品三区| 日本成人在线播放| 亚洲人成电影| av人人综合网| 欧美精品小视频| 九九热免费视频| 国产麻豆综合视频在线观看| 碰草在线视频| 九色在线网站| 99视频在线观看地址| 午夜在线小视频| 国产系列电影在线播放网址| √天堂8资源中文在线| 国产一级免费在线观看| 中文字幕国产视频| 国产黄色片在线播放| 在线免费观看你懂的| 色吊丝av中文字幕| 国产中文第一页| 国产一级免费看| 136福利第一导航国产在线| 国产福利在线观看| www狠狠操| 国产91大片| 国产精品777一区二区| 亚洲综合色视频在线观看| 开心激情五月婷婷| 91美女主播在线视频| 亚洲欧美精品日韩欧美| 国产理论电影在线观看| 国产盗摄一区二区| www在线观看播放免费视频日本| 九九在线视频| 精品卡1卡2卡三卡免费网站| 日本天堂影院在线视频| 国产羞羞视频在线观看| 爱福利在线视频| 国产精品被窝福利一区| 亚洲免费国产| 国产精品被窝福利一区 | 欧美日韩亚洲第一页| 国产网站免费观看| 日本福利午夜视频在线| 国产黄色片中文字幕| 天天操天天操一操| 日本三级在线视频| 在线欧美一级视频| 国产精品视频一区二区三区麻豆| av在线第一页| 91涩漫在线观看c| 国产视频一二| 国产免费福利| 九九在线视频| 国产专区在线播放| 久久久久久国产视频| www在线视频| xxx国产精品| 日p在线观看| www.成人.com| 久久精品国产亚洲a∨麻豆| 亚洲永久免费网站| 在线观看电影av| 永久免费av网站| 精品国产丝袜高跟鞋| 91免费日韩| 2018狠狠干| 四虎www视频| 欧美96在线| 成人亚洲一区二区三区| 黄色三级视频在线观看| 二区三区中文字幕| 国产图片综合| 国产二区三区在线| av大片在线| 日本动漫同人动漫在线观看| 久久99国产视频| 国产一区二区在线|播放| 国产三级在线观看| 国产精品入口麻豆电影| 在线天堂中文www视软件| 亚洲妇熟xxxx妇色黄| 免费看ww视频网站入口| 日本中文字幕视频在线| 国产91久久久久| 免费女人毛片视频| 国产黄色高清在线| 欧美性猛交xxxxbbbb| 国产三级自拍| 超碰在线中文| 精品卡一卡卡2卡3网站| 狠狠插狠狠操| av手机免费观看| 中文字幕在线观看播放| 国产91足控脚交在线观看| 久久精品亚洲7777影院| 国产h在线观看| 免费观看久久久久| 国产精品视频一区二区久久| 欧美亚洲天堂| gogogogo高清视频在线| 国产香蕉视频在线观看| 色综合久久五月天| 国产9色视频| 国产桃色电影在线播放| 狠狠操视频网| 男女午夜视频在线观看| 在线伊人免费视频| 中文字幕网站视频在线| 中文字幕av高清| 中文字幕网站视频在线| 人人九九精品| www.狠狠色.com| 在线观看免费观看在线91| 中文字幕国产视频| 国内精品一区视频| 欧美婷婷久久五月精品三区| 亚洲最新永久观看在线| a√在线视频| 在线观看视频污| av免费在线一区二区三区| 精品999视频| 精品卡一卡卡2卡3网站| 国产精品666| 中文字幕有码在线视频| 国产丝袜自拍| 国产对白叫床清晰在线播放| 国产精品区一区二| 中文av在线播放| www.色五月| 久艹在线视频| 国产精品自拍亚洲| 国产在线黄色片| 中文字幕久热在线精品| 国产精品视频一区二区久久| 国产精品久久麻豆| 永久免费网站在线| 任你操在线观看| 国产秒拍福利视频露脸| 日本中文字幕高清视频| 国产午夜视频| 午夜影院免费看| 国产你懂的在线观看| 国产成人亚洲精品播放器下载| 国产高清一级片| 牛牛精品视频在线| 国产天堂在线观看| www.av在线视频| 国产区卡一卡二卡三乱码免费| 精品999视频| 国产美女自拍视频| 2018中文字幕在线| 国产美女在线播放| 精品国产高清a毛片无毒不卡 |