2 つの Golang 大きなファイル読み取りソリューション

藏色散人
リリース: 2021-01-04 14:23:18
転載
2558 人が閲覧しました

次のコラム golang チュートリアル では、Golang で非常に大きなファイルを読み取るための 2 つのソリューションを紹介します。困っている友人の役に立てば幸いです。

2 つの Golang 大きなファイル読み取りソリューション

Golang で非常に大きなファイルを読み取るための 2 つのソリューション

1. ストリーム処理方法

2. 映画処理

昨年の面接で、非常に大きなファイルをどのように扱うのですかと尋ねられました。当時はこの質問についてあまり考えていませんでした。帰国後、この問題について注意深く調べ、議論しました

たとえば、数年間実行され、サイズが 100G のログ ファイルがあります。前の操作によると、コードは次のように記述できます:

func ReadFile(filePath string) []byte{
    content, err := ioutil.ReadFile(filePath)
    if err != nil {
        log.Println("Read error")
    }
    return content
}
ログイン後にコピー

上記のコードは数メガバイトのファイルを読み取ることができますが、ファイルが自分自身とそのメモリよりも大きい場合は、直接ひっくり返ります。上記のコードは、ファイルのすべての内容をメモリに読み込んでからそれを返すため、数メガバイトのファイルがある場合、メモリはそれを処理できる十分な大きさですが、ファイルが数百メガバイトになると、処理できなくなります。とても簡単に加工できます。そうすると、正しい方法は 2 つあります。1 つ目は、ストリーム処理を使用することです。コードは次のとおりです。

func ReadFile(filePath string, handle func(string)) error {
    f, err := os.Open(filePath)
    defer f.Close()
    if err != nil {
        return err
    }
    buf := bufio.NewReader(f)

    for {
        line, err := buf.ReadLine("\n")
        line = strings.TrimSpace(line)
        handle(line)
        if err != nil {
            if err == io.EOF{
                return nil
            }
            return err
        }
        return nil
    }
}
ログイン後にコピー

2 つ目の解決策は、シャード処理です。バイナリ ファイルを読み取るとき、改行文字はありません。大きなファイルを処理するには、次のソリューションを使用してください。

func ReadBigFile(fileName string, handle func([]byte)) error {
    f, err := os.Open(fileName)
    if err != nil {
        fmt.Println("can't opened this file")
        return err
    }
    defer f.Close()
    s := make([]byte, 4096)
    for {
        switch nr, err := f.Read(s[:]); true {
        case nr < 0:
            fmt.Fprintf(os.Stderr, "cat: error reading: %s\n
ログイン後にコピー

関連する技術記事の詳細については、go 言語チュートリアル 列を参照してください。

以上が2 つの Golang 大きなファイル読み取りソリューションの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
go
ソース:csdn.net
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート