成人性生交大片免费看视频r_亚洲综合极品香蕉久久网_在线视频免费观看一区_亚洲精品亚洲人成人网在线播放_国产精品毛片av_久久久久国产精品www_亚洲国产一区二区三区在线播_日韩一区二区三区四区区区_亚洲精品国产无套在线观_国产免费www

主頁(yè) > 知識(shí)庫(kù) > golang逐行讀取文件的操作

golang逐行讀取文件的操作

熱門(mén)標(biāo)簽:上海極信防封電銷(xiāo)卡價(jià)格 宿遷便宜外呼系統(tǒng)代理商 仙桃400電話(huà)辦理 地圖標(biāo)注免費(fèi)定制店 寧波語(yǔ)音外呼系統(tǒng)公司 不封卡外呼系統(tǒng) 重慶慶云企業(yè)400電話(huà)到哪申請(qǐng) 鄭州智能語(yǔ)音電銷(xiāo)機(jī)器人價(jià)格 湛江crm外呼系統(tǒng)排名

我就廢話(huà)不多說(shuō)了,大家還是直接看代碼吧~

func ReadLine(fileName string) ([]string,error){
	f, err := os.Open(fileName)
	if err != nil {
		return nil,err
	}
	buf := bufio.NewReader(f)
	var result []string
	for {
		line, err := buf.ReadString('\n')
		line = strings.TrimSpace(line)
		if err != nil {
			if err == io.EOF { //讀取結(jié)束,會(huì)報(bào)EOF
				return result,nil
			}
			return nil,err
		}
		result = append(result,line)
	}
	return result,nil
}

補(bǔ)充:Golang讀取文件和處理超大文件方案

Golang 操作文件的讀取的方法很多,適用的場(chǎng)景也是各不相同,在此我們將文件的讀取分為如下幾種 :

文件整體讀取

文件分片讀取(塊級(jí)讀取)

文件行級(jí)讀取

系統(tǒng)的配置不同,執(zhí)行的耗時(shí)也不相同,此處給出一參考

系統(tǒng)配置 :

OS : Windows10

Memory : 16G

CPU (英特爾)Intel® Core™ i3-4370 CPU @ 3.80GHz(3800 MHz)

1. 文件整體讀取

文件整體讀取就是將文件一次性讀取到,理解上是將文件的內(nèi)容第一次就讀取完了

使用場(chǎng)景 :

針對(duì)小文件比較合適(大文件讀取空間和時(shí)間的消耗也很大)

對(duì)于整體性強(qiáng)的文件也比較合適(文件也不能太大)

代碼示例1

package main
import (
 "bufio"
 "fmt"
 "io"
 "io/ioutil"
 "log"
 "os"
 "time"
)
// 測(cè)試用的文本文件11M大小
var m11 string = `G:\runtime\log\ccapi\11M.log`
// 測(cè)試用的文本文件400M大小
var m400 string = `G:\runtime\log\ccapi\400M.log`

// 將整個(gè)文件都讀取
func readAll(filePath string) {
 start1 := time.Now()
 ioutil.ReadFile(filePath)
 fmt.Println("readAll spend : ", time.Now().Sub(start1))
}
func main() {
 readAll(m11)
 readAll(m400)
}

$ go run main.go
readAll spend : 6.9999ms
readAll spend : 358.8014ms

代碼示例2

package main
import (
 "bufio"
 "fmt"
 "io"
 "io/ioutil"
 "log"
 "os"
 "time"
)
// 測(cè)試用的文本文件11M大小
var m11 string = `G:\runtime\log\ccapi\11M.log`
// 測(cè)試用的文本文件400M大小
var m400 string = `G:\runtime\log\ccapi\400M.log`
// 將文件完整讀取
func readAllBuff(filePath string) {
 start1 := time.Now()
 // 打開(kāi)文件
 FileHandle, err := os.Open(filePath)
 if err != nil {
 log.Println(err)
 return
 }
 // 關(guān)閉文件
 defer FileHandle.Close()
 // 獲取文件當(dāng)前信息
 fileInfo, err := FileHandle.Stat()
 if err != nil {
 log.Println(err)
 return
 }
 buffer := make([]byte, fileInfo.Size())
 // 讀取文件內(nèi)容,并寫(xiě)入buffer中
 n, err := FileHandle.Read(buffer)
 if err != nil {
 log.Println(err)
 }
 // 打印所有切片中的內(nèi)容
 fmt.Println(string(buffer[:n]))
 fmt.Println("readAllBuff spend : ", time.Now().Sub(start1))
}
func main() {
 readAllBuff(m11)
 readAllBuff(m400)
}

2. 文件分片讀取

對(duì)文件一部分一部分逐步的讀取,直到文件完全讀取完

PS : 每次讀取文件的大小是根據(jù)設(shè)置的 分片 大小 ,所以對(duì)于讀取文本類(lèi)型的文件時(shí)(例如 : 日志文件)

不一定是按照你的期望逐行輸出,因?yàn)椴粫?huì)處理文本尾部的換行符,而是按照分片大小讀取內(nèi)容

使用場(chǎng)景 :

讀取超大的文件很合適

讀二進(jìn)制類(lèi)型的文件很合適(比如:音視頻文件或者資源類(lèi)型文件等)

代碼示例

package main
import (
 "bufio"
 "fmt"
 "io"
 "io/ioutil"
 "log"
 "os"
 "time"
)
// 測(cè)試用的文本文件11M大小
var m11 string = `G:\runtime\log\ccapi\11M.log`
// 測(cè)試用的文本文件400M大小
var m400 string = `G:\runtime\log\ccapi\400M.log`
// 文件一塊一塊的讀取
func readBlock(filePath string) {
 start1 := time.Now()
 FileHandle, err := os.Open(filePath)
 if err != nil {
 log.Println(err)
 return
 }
 defer FileHandle.Close()
 // 設(shè)置每次讀取字節(jié)數(shù)
 buffer := make([]byte, 1024)
 for {
 n, err := FileHandle.Read(buffer)
 // 控制條件,根據(jù)實(shí)際調(diào)整
 if err != nil  err != io.EOF {
 log.Println(err)
 }
 if n == 0 {
 break
 }
 // 如下代碼打印出每次讀取的文件塊(字節(jié)數(shù))
 //fmt.Println(string(buffer[:n]))
 }
 fmt.Println("readBolck spend : ", time.Now().Sub(start1))
}
func main() {
 readBlock(m11)
 readBlock(m400)
}

$ go run main.go
readBolck spend : 31.9814ms
readBolck spend : 1.0889488s

3. 文件逐行讀取

對(duì)文件一行一行的讀取,直到讀到文件末尾

使用場(chǎng)景 :

讀取超大的文件很合適(例如 : 超大log文件等)

讀取的文件最好是有換行的(如果使用單行文件組成的大文件,需要注意)

對(duì)需要分析內(nèi)容的大文件

統(tǒng)計(jì)某些數(shù)據(jù)出現(xiàn)的次數(shù)

查詢(xún)某些數(shù)據(jù)是否存在

查找指定行的數(shù)據(jù)

示例代碼1

package main
import (
 "bufio"
 "fmt"
 "io"
 "io/ioutil"
 "log"
 "os"
 "time"
)
// 測(cè)試用的文本文件11M大小
var m11 string = `G:\runtime\log\ccapi\11M.log`
// 測(cè)試用的文本文件400M大小
var m400 string = `G:\runtime\log\ccapi\400M.log`
// 讀取文件的每一行
func readEachLineReader(filePath string) {
 start1 := time.Now()
 FileHandle, err := os.Open(filePath)
 if err != nil {
 log.Println(err)
 return
 }
 defer FileHandle.Close()
 lineReader := bufio.NewReader(FileHandle)
 for {
  // 相同使用場(chǎng)景下可以采用的方法
 // func (b *Reader) ReadLine() (line []byte, isPrefix bool, err error)
 // func (b *Reader) ReadBytes(delim byte) (line []byte, err error)
 // func (b *Reader) ReadString(delim byte) (line string, err error)
 line, _, err := lineReader.ReadLine()
 if err == io.EOF {
 break
 }
 // 如下是某些業(yè)務(wù)邏輯操作
 // 如下代碼打印每次讀取的文件行內(nèi)容
 fmt.Println(string(line))
 }
 fmt.Println("readEachLineReader spend : ", time.Now().Sub(start1))
}
func main(){
 readEachLineReader(m11)
 readEachLineReader(m400)
}

$ go run main.go
readEachLineReader spend : 16.9902ms
readEachLineReader spend : 537.9683ms

代碼示例2

package main
import (
 "bufio"
 "fmt"
 "io"
 "io/ioutil"
 "log"
 "os"
 "time"
)
// 測(cè)試用的文本文件11M大小
var m11 string = `G:\runtime\log\ccapi\11M.log`
// 測(cè)試用的文本文件400M大小
var m400 string = `G:\runtime\log\ccapi\400M.log`
// 讀取文件的每一行
func readEachLineScanner(filePath string) {
 start1 := time.Now()
 FileHandle, err := os.Open(filePath)
 if err != nil {
 log.Println(err)
 return
 }
 defer FileHandle.Close()
 lineScanner := bufio.NewScanner(FileHandle)
 for lineScanner.Scan() {
  // 相同使用場(chǎng)景下可以使用如下方法
 // func (s *Scanner) Bytes() []byte
 // func (s *Scanner) Text() string
 // 實(shí)際邏輯 : 對(duì)讀取的內(nèi)容進(jìn)行某些業(yè)務(wù)操作
 // 如下代碼打印每次讀取的文件行內(nèi)容
 fmt.Println(lineScanner.Text())
 }
 fmt.Println("readEachLineScanner spend : ", time.Now().Sub(start1))
}
func main() {
 readEachLineScanner(m11)
 readEachLineScanner(m400)
}

$ go run main.go
readEachLineScanner spend : 17.9895ms
readEachLineScanner spend : 574.1722ms

4. 總結(jié)

面試中常見(jiàn)的類(lèi)似超大文件讀取的問(wèn)題,通常我們采用分片讀取或者逐行讀取的方案即可

大文件的上傳也可以采用類(lèi)似的解決方案 , 每次讀取文件的部分內(nèi)容上傳(寫(xiě)入)網(wǎng)絡(luò)接口中,直至文件讀取完畢

普通的小文件并且對(duì)內(nèi)容沒(méi)有太多操作的,可以采用整體讀取,速度相對(duì)較快

對(duì)文件內(nèi)容有操作的采用分片讀取和逐行讀取更合適

二進(jìn)制類(lèi)型文件采用分片讀取或者整體讀取的方案比較合適

文件讀取不僅是本地文件,要讀去網(wǎng)絡(luò)上的文件(各種文檔,音視頻,圖片,和其他各種類(lèi)型文件)時(shí)要訪問(wèn)到文件獲取 io.ReadCloser 或者 io.Reader 后可以采用三種方式將文件內(nèi)容讀取到

func ReadAll(r io.Reader) ([]byte, error) 文件完整讀取

func Copy(dst Writer, src Reader) (written int64, err error) 文件讀取并寫(xiě)入

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

通過(guò)Reader 接口的 Read 方法讀取

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。

您可能感興趣的文章:
  • golang文件讀取-按指定BUFF大小讀取方式
  • Golang 實(shí)現(xiàn)分片讀取http超大文件流和并發(fā)控制
  • 淺談Golang是如何讀取文件內(nèi)容的(7種)
  • golang 使用 viper 讀取自定義配置文件
  • 如何利用Golang解析讀取Mysql備份文件
  • golang讀取文件的常用方法總結(jié)
  • Golang 實(shí)現(xiàn)超大文件讀取的兩種方法

標(biāo)簽:電子產(chǎn)品 物業(yè)服務(wù) 海南 遼寧 西雙版納 青海 安康 儋州

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《golang逐行讀取文件的操作》,本文關(guān)鍵詞  golang,逐行,讀取,文件,的,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《golang逐行讀取文件的操作》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于golang逐行讀取文件的操作的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    久久久久久久伊人| 高清欧美电影在线| 羞羞网站免费观看| 日本欧美爱爱爱| av在线不卡播放| 高清视频一区二区三区| 美女露胸视频在线观看| 日韩av免费在线播放| 涩涩在线视频| 国产高清精品一区| 女教师淫辱の教室蜜臀av软件| 蜜桃视频中文字幕| 78精品国产综合久久香蕉| 国产一区二区免费在线观看| 狠狠操综合网| 欧美一区二区大片| 久久这里有精品视频| 亚洲综合色婷婷| 51久久精品夜色国产麻豆| 欧美第一在线视频| 久久手机在线视频| 国产视频123区| 欧美日韩三级在线| 欧美人与拘性视交免费看| 香蕉视频xxxx| 18av千部影片| 一本久道久久综合狠狠爱| 高清国产一区二区| 136福利视频| 国产特级毛片| 女女同性女同一区二区三区按摩| 日韩大片在线| 欧美性感美女一区二区| 国产精品美女久久久久av爽李琼| 日韩一区二区精品| 天天色棕合合合合合合合| 五级黄高潮片90分钟视频| 黄p免费网站| 国产嫩bbwbbw高潮| 久久成人综合| 亚洲黄色小说在线观看| av电影天堂一区二区在线观看| 国产亚洲人成网站在线观看| 日韩国产欧美三级| 人妻体体内射精一区二区| 精品一区电影国产| 天堂在线www天堂中文在线| 欧美专区一区| 亚洲一区二区三区三州| www视频完整版| 一区二区三区四区五区视频在线观看| 韩国中文字幕av| 欧美 中文字幕| 日本不卡视频在线播放| 亚洲黄色一区二区三区| 亚洲精品v欧美精品v日韩精品| 老鸭窝av在线| 国产视频亚洲精品| 爱啪视频在线观看视频免费| 97视频在线观看成人| 少妇精品视频在线观看| 在线观看免费观看在线| 久久成人小视频| 久久久久久国产精品日本| 欧美老少做受xxxx高潮| 丝袜中文在线| 最近免费看av| 国产曰批免费观看久久久| 成人欧美色图| 日韩亚洲第一页| ●精品国产综合乱码久久久久| 亚洲伊人一本大道中文字幕| 色视频免费观看| 久久久免费观看| 日本精品视频一区二区三区| 先锋资源av在线| 欧美激情精品久久久久久蜜臀| 成a人v在线播放| 成人亚洲欧美一区二区三区| 欧美亚洲国产成人精品| 亚洲精品色婷婷福利天堂| 亚洲成avwww人| 日韩av影视在线| 大香伊人久久精品一区二区| 欧美一区二区三区网站| 欧美日韩一区二区免费在线观看| www.操操| 亚洲精品久久7777| 欧美日韩国产中文精品字幕自在自线| 日产国产欧美视频一区精品| 国产精品99久久99久久久二8| 国产麻豆精品在线| 999视频在线观看| 粉嫩嫩av羞羞动漫久久久| 深夜福利网站在线观看| 精品久久久久久久久久久久| 国产精品日韩欧美一区二区| 一级全黄少妇性色生活片| 亚洲美女网站18| 一级黄色毛毛片| 91在线公开视频| 成人久久久精品乱码一区二区三区| www.男人的天堂.com| 久久久亚洲国产| 免费99精品国产自在在线| 国产精品久久久一区麻豆最新章节| caoporn免费在线视频| 免费黄色特级片| 五月天婷婷社区| 国产无遮挡在线观看| 视频一区二区三区在线看免费看| 国产不卡视频一区二区三区| 久久久精品综合| 一个人看的视频www在线观看免费| 女同性一区二区三区人了人一| 亚洲变态欧美另类捆绑| 国产女人18毛片水真多成人如厕| canopen超线视频网线的应用| 精品国精品国产自在久不卡| 悠悠色在线精品| 久久久国产免费| 亚洲激情视频网| 第四色中文综合网| 你懂的网址一区二区三区| 日韩欧美的一区二区| 99国产精品视频免费观看| 日韩一区二区精品视频| 日本中文字幕高清| www日韩精品| 亚洲石原莉奈一区二区在线观看| 三上悠亚在线观看视频| 先锋成人影音| 日韩精品欧美一区二区三区| 九九九九九精品| 欧美日韩国产丝袜另类| 亚洲av成人精品毛片| 最近免费观看高清韩国日本大全| 中文字幕の友人北条麻妃| 少妇一级淫免费播放| 成人中文字幕合集| 国产精品福利导航| 97久久伊人激情网| 天天操天天爱天天干| 日本高清不卡视频| 亚洲丝袜自拍清纯另类| 国产.精品.日韩.另类.中文.在线.播放| 天天色天天射天天干| 国产精品综合在线| 亚洲在线免费观看视频| 99精品视频在线观看播放| 久久av一区二区三区| 国产精品久久久久999| 欧美性做爰毛片| 久久综合欧美| 日本成人a视频| 日日摸夜夜添夜夜添精品视频| 亚洲少妇一区| 国产精品第十页| 亚洲成在人线在线播放| 91国产免费观看| 三级网站免费看| 欧美高清视频一二三区| 精品在线一区| 天天操中文字幕| 黄网网址免费| 久久久久免费观看| 色先锋影音岛国av资源| 中国女人内谢25xxxx免费视频| 热99精品只有里视频最新| 免费在线播放第一区高清av| 国产女人爽到高潮a毛片| 一区二区成人在线视频| 国产日韩在线亚洲字幕中文| 成人黄色电影在线| 蜜桃999成人看片在线观看| 色婷婷激情久久| 无码免费一区二区三区免费播放| 黄色动漫在线免费观看| 91青青草免费观看| 亚洲电影免费| 青青草成人免费在线视频| 日韩精品一页| 日产乱码一卡二卡三免费| 成人动漫在线一区| 两个人看的无遮挡免费视频| 日韩欧美一区二区三区在线视频| 国产婷婷色综合av蜜臀av| 国产最新精品免费| 国产美女裸体无遮挡免费视频| 久久亚洲私人国产精品va媚药| 99r精品视频| 亚洲熟妇av日韩熟妇在线| 中文字幕国产精品久久| 真实乱视频国产免费观看| 亚洲欧美卡通动漫| 亚洲成年人在线播放| 亚洲成年人电影| 精品一区二区三区在线观看国产| 日本综合一区二区三区| 日韩精品最新网址| 色欲一区二区三区精品a片| 久久狠狠高潮亚洲精品| 国产精品高潮呻吟久久久| 国产色婷婷国产综合在线理论片a| 在线观看成人av电影| 亚洲色图欧美在线| 中文字幕在线看高清电影| 午夜视频99| 99精品国产在热久久下载| 六月丁香综合| 色爱区成人综合网| 日本乱理伦在线| 91黄在线观看| 欧美美女黄视频| 无码免费一区二区三区| 8av国产精品爽爽ⅴa在线观看| 国产一区二区三区影院| 亚洲开心激情网| 国产一区二区在线|播放| av男人天堂av| 久久手机免费观看| 色的视频在线观看免费播放| 欧美色图国产精品| 免费能直接在线观看黄的视频| 7777精品视频| 欧美一区二区三区性视频| 97在线免费| 老熟妇精品一区二区三区| 操欧美女人视频| 国产永久免费网站| 欧美成人se01短视频在线看| 亚洲欧美日韩久久精品| 青青免费在线视频| 男女男精品视频站| 你懂的视频网站| 亚洲成人av资源网| jvid一区二区三区| 欧美a级片一区| 国产成人8x视频一区二区| 精品国产_亚洲人成在线| 日韩高清国产一区在线| 亚洲精品久久久久中文字幕二区| 男人精品网站一区二区三区| 久久毛片亚洲| 亚洲v在线看| 四虎永久免费影库二三区| 久久精品国产99久久6| av免费精品一区二区三区| 欧美激情精品在线| 在线观看免费国产小视频| 九一国产精品| 女仆av观看一区| 在线观看视频黄色| f2c人成在线观看免费视频| 屁屁影院在线观看| 91超碰碰碰碰久久久久久综合| 黑人极品videos精品欧美裸| 婷婷久久综合九色国产成人| av电影不卡在线观看| 国产一区二区视频网站| 欧美成人国产va精品日本一级| 国产精品1024| 久久riav二区三区| 精品一区二区视频| 国产又粗又硬视频| 祥仔av免费一区二区三区四区| 毛片在线网站| 国产h视频在线播放| 亚洲欧美综合色| 国产精品麻豆一区| 在线观看岛国av| 99re这里只有精品在线| 色中色综合成人| 欧美一级免费观看| 波多野结衣综合网| 国产一区二区精品调教| 日韩精品高清视频| 国产精品亚洲аv天堂网| 欧美凹凸一区二区三区视频| 日韩欧美在线一区二区三区| 51精品久久久久久久蜜臀| 亚洲电影成人av99爱色| 久久国内精品自在自线400部| 少妇人妻大乳在线视频| 在线一区欧美| 深爱五月激情网| av色图一区| 中文字幕乱码在线人视频| 国产福利免费视频| 成人免费毛片嘿嘿连载视频| 大奶一区二区三区| 欧美日韩亚洲国产一区| 69久久夜色精品国产69| 在线看黄色av| 一区二区三区四区视频在线观看| 丝袜亚洲另类丝袜在线| 久久久久久麻豆| 亚洲精品成人无码熟妇在线| 国产福利小视频在线观看| 黄色精品免费看| 久久综合久久综合九色| 无码人妻精品一区二区50| 国内外成人免费激情视频| 欧美片一区二区三区| 亚洲综合在线一区| 国产69精品久久久久9| 成人婷婷网色偷偷亚洲男人的天堂| 欧美日韩中国免费专区在线看| 999精品网站| www.黄色在线| 秋霞久久久久久一区二区| 亚洲精品1区2区3区| 在线观看亚洲大片短视频| 91高清国产视频| 欧美xxxxxxxx| 人妻无码久久一区二区三区免费| 91麻豆精品国产综合久久久| 99国产**精品****| 亚洲永久网站| 欧美一区二区三区视频在线观看| 朝桐光av在线一区二区三区| www.91视频.com| 国产午夜精品久久久久久久| 欧美日本精品一区二区三区| 99re91这里只有精品| 精品视频vs精品视频| 亚洲人成人一区二区三区| 亚洲在线观看视频|