日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

go语言io reader_go语言之IO操作(待补充)

發布時間:2023/12/4 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 go语言io reader_go语言之IO操作(待补充) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前言

在Go中,輸入和輸出操作都是使用原語實現的,原語將數據模擬成可讀的或者可寫的字節流。

而Go的io包提供了io.Reader(將數據從某個資源讀取到傳輸緩沖區被流式傳輸和使用)和io.Writer(從緩沖區讀取數據,并寫入目標資源)接口。實現了io.Reader接口的唯一方法Read(p []byte)(n int, err error),它就是一個讀取器。n 讀取到的字節數

err 發生錯誤的信息(注意:資源讀取完畢返回io.EOF錯誤)

使用Reader

思路: Reader方法內部是循環被調用的,每次迭代都會從數據源取一塊數據放入緩沖區p,資源讀取完畢返回io.EOF錯誤為止。

我們通過strings.NewReader(string) 創建一個字符串讀取器來迭代讀取:package main

import (

"fmt"

"io"

"os"

"strings"

)

func main() {

//創建一個字符串讀取器

reader := strings.NewReader("How are you today You were in a bad mood yesterday")

//創建一個長度為3的切片

p := make([]byte, 3)

//循環取數據

for {

//讀取到的字節數,err 發生錯誤的信息(注意:資源讀取完畢返回io.EOF錯誤)

n, err := reader.Read(p)

if err != nil {

if err == io.EOF {

fmt.Println("The resource is read!")

break

}

fmt.Println("Read err :", err.Error())

os.Exit(1)

}

fmt.Println(string(p[:n]), p[:n])

}

}

輸出打印的內容:How [72 111 119]

ar [32 97 114]

e y [101 32 121]

ou [111 117 32]

tod [116 111 100]

ay [97 121 32]

You [89 111 117]

we [32 119 101]

re [114 101 32]

in [105 110 32]

a b [97 32 98]

ad [97 100 32]

moo [109 111 111]

d y [100 32 121]

est [101 115 116]

erd [101 114 100]

ay [97 121]

The resource is read!

拓展例子(讀取文件行數并且打印每一行內容和二進制流)package main

import (

"bufio"

"fmt"

"os"

"time"

)

func main() {

if len(os.Args) < 2 {

os.Exit(1)

}

filename := os.Args[1]

file, err := os.Open(filename)

defer file.Close()

if err != nil {

fmt.Println(err.Error())

os.Exit(1)

}

reader := bufio.NewReader(file)

var line int

fmt.Print("下面為你讀取",filename,"每一行的內容:\n")

for {

lineContent, isPrefix, err := reader.ReadLine()

if err != nil {

break

}

if !isPrefix {

line++

time.Sleep(time.Second*1)

fmt.Println("第",line,"行的二進制數據流為:", lineContent,"內容是:",string(lineContent))

fmt.Print("\n")

}

}

fmt.Println("名字為:",filename,"的文件一共有:", line,"行")

}

總結

以上是生活随笔為你收集整理的go语言io reader_go语言之IO操作(待补充)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。