首页 > 其他分享 >Golang秒读32GB大文件,如何读取?

Golang秒读32GB大文件,如何读取?

时间:2023-12-28 09:45:32浏览次数:35  
标签:文件 读取 err Golang 32GB file Fatal log

在Go中,处理大文件时,一般采用分块读取的方式,以避免一次性加载整个文件到内存中。以下是读取大文件的简洁步骤:

打开文件: 使用os.Open打开文件。

file, err := os.Open("largefile.txt")
if err != nil {
    log.Fatal(err)
}
defer file.Close()

获取文件信息: 使用file.Stat获取文件的基本信息,包括文件大小。

fileInfo, err := file.Stat()
if err != nil {
    log.Fatal(err)
}
fileSize := fileInfo.Size()

设置缓冲区大小: 为了提高读取效率,使用合适大小的缓冲区。

bufferSize := 8192 // 8KB 缓冲区大小
buffer := make([]byte, bufferSize)

 

循环读取文件内容: 使用file.Read循环读取文件内容。

for {
    bytesRead, err := file.Read(buffer)
    if err == io.EOF {
        // 文件读取完毕
        break
    }
    if err != nil {
        log.Fatal(err)
    }

    // 处理读取的数据,例如输出到控制台
    fmt.Print(string(buffer[:bytesRead]))
}

关闭文件: 读取完成后关闭文件。

file.Close()

下面是一个完整的读取大文件的示例代码:

package main

import (
    "bufio"
    "log"
    "os"
)

func main() {
    file, err := os.Open("large_file.txt")
    if err != nil {
        log.Fatal(err)
    }
    defer file.Close()

    const maxScanTokenSize = 64 * 1024 * 1024 // 64MB
    buf := make([]byte, maxScanTokenSize)

    scanner := bufio.NewScanner(file)
    scanner.Buffer(buf, maxScanTokenSize)

    for scanner.Scan() {
        line := scanner.Text()
        // 处理每一行的逻辑
    }

    if err := scanner.Err(); err != nil {
        log.Fatal(err)
    }
}

标签:文件,读取,err,Golang,32GB,file,Fatal,log
From: https://www.cnblogs.com/cheyunhua/p/17931994.html

相关文章

  • Golang基础(一)
    粗略了解Golang的核心特性Go语言的特性一、并发编程不同于传统的多进程或多线程,golang的并发执行单元是一种称为goroutine的协程。其在语言级别提供关键字:go——用于启动协程。chan——golang中用于并发的通道,用于协程的通信。select——golang提供的多路复用机制。close......
  • mybatis在读取配置文件,创建SqlSessionFactory对象时。需要对密码进行解密,再连接数据库
    1、我看了网上很多的方法,主要是说通过新建一个jdbc.properties来获取数据库连接池。但是我试了并没有作用。 2、解决办法:简单粗暴。先用后代码读取原有的mybatis-configuration.xml,然后将密码进行解密后,设值到xml中。最后把解密的xml作为源。去生成一份新的xml文件,把心的xml......
  • nest.js中不同环境的配置读取
    node中不同环境的配置读取在node中最常用的是.env格式的配置文件,他有一个专门的npm包dotenv:我们来创建一个node项目试一下:进入这个目录,安装dotenv:npminstalldotenv然后新建一个.env配置文件:aaa=1bbb=2新建index.js并写入如下内容:require('dotenv').config({p......
  • golang中汇编语义
    bito>TEXTmain.main(SB)D:/main.gomain.go:120xea7580493b6610CMPQ0x10(R14),SPmain.go:120xea75840f8691000000JBE0xea761bmain.go:120xea758a......
  • go-carbon v2.3.0 圣诞特别版发布,轻量级、语义化、对开发者友好的 Golang 时间处理库
    go-carbonv2.3.0圣诞节特别版发布,这应该是2023年的最后一个版本,祝大家圣诞节快乐!carbon是一个轻量级、语义化、对开发者友好的golang时间处理库,支持链式调用。目前已被awesome-go收录,如果您觉得不错,请给个star吧github.com/golang-module/carbongitee.com/golang-m......
  • golang 项目开发如何创建 Module
    golang项目开发如何创建Module原创 demo007x 知识派 2023-12-2208:30 发表于北京 听全文golang项目开发如何创建Moduleimg为什么要创建一个 Module?我们日常开发程序的时候都会引入第三方的 package,使用第三方的package的好处是我们可以快速的开发我们的......
  • Golang协程池ants
    官方示例packagemainimport( "fmt" "github.com/panjf2000/ants/v2" "sync" "sync/atomic" "time")varsumint32funcmyFunc(iinterface{}){ n:=i.(int32) atomic.AddInt32(&sum,n) fmt.Printf(&q......
  • 基于OpenCV的语音数据读取
     1)进入http://yuyin.baidu.com/app,在弹出的界面中单击要针对哪个应用开通语音识别服务,个人测试可全选(开通个人认证,白嫖)   注意:1、百度语音识别API对于要识别的音频源是有要求的:原始PCM的录音参数必须符合8k/16k采样率、16位深、单声道,支持的压缩格式有:pcm(不压缩)、wa......
  • java读取yaml文件
    应用场景自动化测试中,用例数据存放在yaml文件中 数据 person.yaml---id:1name:韧age:18---id:2name:qzcsbjage:19person2.yaml----id:3name:小韧age:18-id:4name:全栈测试笔记age:19person3.yaml----id:5name:韧哥age:18......
  • 为什么python总是读取不到文件
    在Python中,当你尝试读取文件但却无法成功时,可能有几个常见的原因。下面将探讨一些可能导致Python无法读取文件的问题,并提供相应的解决方案。1.文件路径错误:当你提供给Python的文件路径不正确时,它将无法找到该文件。确保你提供的文件路径是准确的,包括文件名和文件所在的文件夹路径。......