Golang 的文件读取方法很多,刚上手时不知道怎么选择,所以贴在此处便后速查。

一次性读取

小文件推荐一次性读取,这样程序更简单,而且速度最快。

复制代码 代码如下:
func ReadAll(filePth string) ([]byte, error) {

 f, err := os.Open(filePth)

 if err != nil {

  return nil, err

 }

return ioutil.ReadAll(f)

}

还有更加简单的方法,我经常使用ioutil.ReadFile(filePth)

分块读取

可在速度和内存占用之间取得很好的平衡。

复制代码 代码如下:
package main

import (

 "bufio"

 "io"

 "os"

)

func processBlock(line []byte) {

 os.Stdout.Write(line)

}

func ReadBlock(filePth string, bufSize int, hookfn func([]byte)) error {

 f, err := os.Open(filePth)

 if err != nil {

  return err

 }

 defer f.Close()

buf := make([]byte, bufSize) //一次读取多少个字节

 bfRd := bufio.NewReader(f)

 for {

  n, err := bfRd.Read(buf)

  hookfn(buf[:n]) // n 是成功读取字节数

if err != nil { //遇到任何错误立即返回,并忽略 EOF 错误信息

   if err == io.EOF {

    return nil

   }

   return err

  }

 }

return nil

}

func main() {

 ReadBlock("test.txt", 10000, processBlock)

}

逐行读取

逐行读取有的时候真的很方便,性能可能慢一些,但是仅占用极少的内存空间。

复制代码 代码如下:
package main

import (

 "bufio"

 "io"

 "os"

)

func processLine(line []byte) {

 os.Stdout.Write(line)

}

func ReadLine(filePth string, hookfn func([]byte)) error {

 f, err := os.Open(filePth)

 if err != nil {

  return err

 }

 defer f.Close()

bfRd := bufio.NewReader(f)

 for {

  line, err := bfRd.ReadBytes('\n')

  hookfn(line) //放在错误处理前面,即使发生错误,也会处理已经读取到的数据。

  if err != nil { //遇到任何错误立即返回,并忽略 EOF 错误信息

   if err == io.EOF {

    return nil

   }

   return err

  }

 }

 return nil

}

func main() {

 ReadLine("test.txt", processLine)

}

golang 文件读取的更多相关文章

  1. golang中读取文件

    读文件 方式1 #利用ioutil.ReadFile 直接从文件读取到[]byte中# file, err := ioutil.ReadFile("file/test.txt") ...

  2. Golang文件IO 一

    Golang文件IO 一 文件IO编程最基本.最常用的就属读写文件操作了.ioutil包实现了一些IO实用功能,其中就包括非常简捷.好用的文件读取功能. ioutil包有7个函数1个变量: var D ...

  3. GOLANG文件拷贝

    GOLANG文件拷贝 在Golang中,使用系统自带函数io.Copy() 如: srcFile := "C:/Users/Wisdom/Desktop/Wisdompic.png" ...

  4. java中的文件读取和文件写出:如何从一个文件中获取内容以及如何向一个文件中写入内容

    import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.Fi ...

  5. php xml 文件读取 XMLReader

    php xml 文件读取 <?php /** $xmlString = '<xml> <persons count="10"> <person ...

  6. 1-2 nodejs小节 文件读取

    1.表达式 在命令行输入  node回车后,可以在后边输入相应的表达式,进行运算操作   2.阻塞文件读取 var data=fs.readFileSync('input.txt', 'utf-8') ...

  7. 详解Js中文件读取机制

    前言,文件读取是提高应用体验度的必须接口,应用场景中需求很频繁. Js处理文件读取,由于处于安全方面的考虑,在2000年以前,都是以“<input type="file"&g ...

  8. C# 文件操作 把文件读取到字节数组

    string zipfile = "c:\\a.zip"; //方法1 FileStream fs = new FileStream(zipfile, FileMode.Open) ...

  9. H5学习系列之文件读取API--本文转自http://blog.csdn.net/jackfrued/article/details/8967667

    HTML5定义了FileReader作为文件API的重要成员用于读取文件,根据W3C的定义,FileReader接口提供了读取文件的方法和包含读取结果的事件模型. FileReader的使用方式非常简 ...

随机推荐

  1. PCM-脉码调制

    1. PCM---Pulse Code Modulation,脉码调制.       在光纤通信系统中,光纤中传输的是二进制光脉冲“0”码和“1”码,它由二进 脉冲编码调制 制数字信号对光源进行通断调 ...

  2. 使用 HTML5 input 类型提升移动端输入体验

    在过去的几年里,在移动设备上浏览网页已变得难以置信的受欢迎. 但是这些设备上的浏览体验,有时遗留很多的有待改进.当涉及到填写表单时,这一点尤为明显.幸运的是,HTML5规范引入了许多新input类型, ...

  3. C# jquery webservices 跨域调用的问题解决方案

    前台代码: <script src="js/jquery-1.9.1.min.js" type="text/javascript"></scr ...

  4. 表单验证插件----jquery validation

    1.下载地址:http://jqueryvalidation.org/ 2.使用方法: <script type="text/javascript" src="ht ...

  5. jsp+ajax实现无刷新

    jsp+ajax实现无刷新,鼠标离开文本框即验证用户名 jsp+ajax实现无刷新,鼠标离开文本框即验证用户名(本功能多用于注册) input.jsp(表单提交页面): %@ page content ...

  6. Git 遇到了 early EOF index-pack failed 问题

    Git 遇到了 early EOF index-pack failed 问题 今天想 clone 一下 boost 在 github 的 repo,结果在 clone 的过程中遇到了下面的错误.我原本 ...

  7. jquery mobile界面数据刷新

    JQM里面当我们更新了某些页面标签(如: listview, radiobuttons, checkboxes, select menus)里的数据时,必须做refresh操作. 为什么必须做refr ...

  8. POJ - 2183 Bovine Math Geniuses

    “模拟“题,运用哈希,不断地按照一定运算规律对一个结果进行计算,如果重复出现就停止并且输出该数.注意到仔细看题,这种题一定要细心! POJ - 2183 Bovine Math Geniuses Ti ...

  9. IIS7的集成模式下如何让自定义的HttpModule不处理静态文件(.html .css .js .jpeg等)请求

    今天将开发好的ASP.NET站点部署到客户的服务器上后,发现了一个非常头疼的问题,那么就是IIS7的应用程序池是集成模式的话,ASP.NET项目中自定义的HttpModule会处理静态文件(.html ...

  10. android混合开发,webview的java与js互操作

    android原生应用,用webview加载应用中的网页,并且java代码与js代码可以互相操作. 这是混合开发的基石,最基本也最重要的东西,实验代码在这里. 概括说说—— java调js:调用web ...