GolangNote

Golang笔记

Golang 按行读取大文件效率较好的方法

Permalink

个人使用中发现,按行读取较大文件 10~100MB ,使用 ReadSlice()scanner.Scan() 性能好一些。

按行读取大文件

Go: ReadSlice 按行读取文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
package main

import (
	"bufio"
	"errors"
	"fmt"
	"io"
	"strings"
)

func Grep(reader io.Reader, str string) error {
	var buf strings.Builder
	r := bufio.NewReaderSize(reader, 64*1024)

	for {
		frag, err := r.ReadSlice('\n')
		if err == bufio.ErrBufferFull {
			buf.Write(frag)
			continue // partial line
		}
		if err == io.EOF {
			if len(frag) == 0 {
				break
			}
		} else if err != nil {
			return errors.New("index parse error: " + err.Error())
		}
		buf.Write(frag)
		line := buf.String()

		pos := strings.Index(line, str)
		if pos != -1 {
			fmt.Printf(line)
		}
		buf.Reset()
	}
	return nil
}

func main() {
	r := strings.NewReader("line 1\nline 2 test\nline3\nline test4")
	_ = Grep(r, "test")
}

本文网址: https://golangnote.com/topic/307.html 转摘请注明来源

Related articles

golang 实现的基于web的文件管理-filebrowser

FileBrowser 在指定目录中提供了一个文件管理界面,可用于上传,删除,预览,重命名和编辑文件。它允许创建多个用户,每个用户都可以有自己的目录。它可以用作独立的应用程序。...

Write a Comment to "Golang 按行读取大文件效率较好的方法"

Submit Comment Login
Based on Golang + fastHTTP + sdb | go1.20 Processed in 0ms