网易首页 > 网易号 > 正文 申请入驻

GoLang之读取文件10种的方法

0
分享至

一. 整个文件读入内存


直接将数据直接读取入内存,是效率最高的一种方式,但此种方式,仅适用于小文件,对于大文件,则不适合,因为比较浪费内存

1.直接指定文化名读取

在 Go 1.16 开始,ioutil.ReadFile 就等价于 os.ReadFile,二者是完全一致的

1.1使用os.ReadFile函数读取文件

1.2使用ioutil.ReadFile函数读取文件

2.先创建句柄再读取

2.1使用os.OpenFile函数只读形式获取句柄

2.2代码讲解

2.2.1os.File结构体

2.2.2os.OpenFile函数

2.2.3io.Reader接口

二.每次只读取一行

一次性读取所有的数据,太耗费内存,因此可以指定每次只读取一行数据,方法有三种:
(1)bufio.读行()
(2)bufio.读取字节("\n")
(3)bufio.ReadString(’\n’)
在 bufio 的源码注释中,曾说道 bufio.ReadLine() 是低级库,不太适合普通用户使用,更推荐用户使用 bufio.ReadBytes和bufio.ReadString 去读取单行数据
因此,这里不再介绍 bufio.读行()
1.使用bufio.Reader结构体的ReadBytes方法读取字节数

ReadBytes读取直到第一次遇到delim字节,返回一个包含已读取的数据和delim字节的切片。如果ReadBytes方法在读取到delim之前遇到了错误,它会返回在错误之前读取的数据以及该错误(一般是io.EOF)。当且仅当ReadBytes方法返回的切片不以delim结尾时,会返回一个非nil的错误

2.使用bufio.Reader结构体的ReadString方法读取字符串

ReadString读取直到第一次遇到delim字节,返回一个包含已读取的数据和delim字节的字符串。如果ReadString方法在读取到delim之前遇到了错误,它会返回在错误之前读取的数据以及该错误(一般是io.EOF)。当且仅当ReadString方法返回的切片不以delim结尾时,会返回一个非nil的错误

3.代码讲解

3.1bufio.Reader结构体

三.每次只读取固定字节数

每次仅读取一行数据,可以解决内存占用过大的问题,但要注意的是,并不是所有的文件都有换行符 \n;

因此对于一些不换行的大文件来说,还得再想想其他办法
1.使用os库

通用的做法是:
先创建一个文件句柄,可以使用 os.Open 或者 os.OpenFile;
然后 bufio.NewReader 创建一个 Reader;
然后在 for 循环里调用 Reader 的 Read 函数,每次仅读取固定字节数量的数据
Read方法读取数据写入p;本方法返回写入p的字节数;本方法一次调用最多会调用下层Reader接口一次Read方法,因此返回值n可能小于len§;读取到达结尾时,返回值n将为0而err将为io.EOF

2.使用 syscall库

os 库本质上也是调用 syscall 库,但由于 syscall 过于底层,如非特殊需要,一般不会使用 syscall;

本篇为了内容的完整度,这里也使用 syscall 来举个例子;

本例中,会每次读取 100 字节的数据,并发送到通道中,由另外一个协程进行读取并打印出来

版权声明:本文为CSDN博主「GoGo在努力」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_52690231/article/details/123007771

特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。

Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.

相关推荐
热点推荐
人体生理上有啥不合理之处?免疫系统:我承认我有赌的成分在里面

人体生理上有啥不合理之处?免疫系统:我承认我有赌的成分在里面

今日养生之道
2024-06-01 18:32:06
克里米亚破防!俄罗斯价值1亿美元雷达站被毁

克里米亚破防!俄罗斯价值1亿美元雷达站被毁

亡海中的彼岸花
2024-06-01 18:24:52
凡尔赛!莫德里奇克罗斯夺冠做5+1手势,个人斩获6冠+皇马15冠

凡尔赛!莫德里奇克罗斯夺冠做5+1手势,个人斩获6冠+皇马15冠

818体育
2024-06-02 08:24:56
周鸿祎喜提问界M9:活了50多年 这是我收到最好的六一节礼物

周鸿祎喜提问界M9:活了50多年 这是我收到最好的六一节礼物

户外小阿隋
2024-06-01 20:34:08
河北突发砍杀事件,三人伤亡嫌犯落网,视频曝光,太吓人了

河北突发砍杀事件,三人伤亡嫌犯落网,视频曝光,太吓人了

小肖文
2024-06-01 23:24:32
小糯米10岁了!杨幂公开为女儿庆生:祝我闺女生日快乐

小糯米10岁了!杨幂公开为女儿庆生:祝我闺女生日快乐

娱慧
2024-06-01 18:42:08
在单位里,你还有5到7年退休,请做4方面准备,确保晚年幸福

在单位里,你还有5到7年退休,请做4方面准备,确保晚年幸福

职场资深秘书
2024-06-01 11:04:03
百思不得其解,东契奇每个球都“慢悠悠”地,为何防守就是没办法

百思不得其解,东契奇每个球都“慢悠悠”地,为何防守就是没办法

皮皮文章J
2024-06-01 16:50:27
再见,皇马!曝“落寞先生”转投曼城!头号猎物遭标价8000万欧

再见,皇马!曝“落寞先生”转投曼城!头号猎物遭标价8000万欧

头狼追球
2024-06-02 09:36:57
张雪峰收费价格曝光,志愿填报课收费2万,广告报价25万起

张雪峰收费价格曝光,志愿填报课收费2万,广告报价25万起

映射生活的身影
2024-05-31 19:20:41
他是姬鹏飞的独子,当赖昌星保护伞被判处死刑,父亲为求情而病亡

他是姬鹏飞的独子,当赖昌星保护伞被判处死刑,父亲为求情而病亡

纸鸢奇谭
2023-08-31 10:22:16
科贝尔:克罗斯的角球太出色了;希望罗伊斯一切顺利

科贝尔:克罗斯的角球太出色了;希望罗伊斯一切顺利

懂球帝
2024-06-02 10:20:04
事实证明,离开董明珠的孟羽童,最终已经走上了一条“不归路”

事实证明,离开董明珠的孟羽童,最终已经走上了一条“不归路”

前沿天地
2024-06-01 19:38:44
大家做好准备:不出10年,燃油车或将变得“很难用”,原因很真实

大家做好准备:不出10年,燃油车或将变得“很难用”,原因很真实

通文知史
2023-11-09 15:14:41
黄奇帆:房地产的负债率都飙到90%了,房价怎么可能还会往上涨!

黄奇帆:房地产的负债率都飙到90%了,房价怎么可能还会往上涨!

名岂文章著
2024-05-20 19:28:35
广东一狗被撞伤后每天定时吃一种草,一查发现那草是大叶千斤拔

广东一狗被撞伤后每天定时吃一种草,一查发现那草是大叶千斤拔

科普大世界
2024-06-01 23:06:39
河南64岁大爷五年间染指55名女性,只因太了解女性心理

河南64岁大爷五年间染指55名女性,只因太了解女性心理

真实故事汇
2024-05-06 13:31:30
江姐儿子定居美国,记者特意问他“为何不回国”?他的回答很无奈

江姐儿子定居美国,记者特意问他“为何不回国”?他的回答很无奈

猫眼观史
2024-05-21 16:16:14
网传比亚迪计划裁员?优化10到20%,房补车补打折,考核加重…

网传比亚迪计划裁员?优化10到20%,房补车补打折,考核加重…

火山诗话
2024-05-30 20:30:58
阿丽错误的选择

阿丽错误的选择

番跟头的番号
2024-06-01 16:38:17
2024-06-02 10:34:44
马哥Linux云计算
马哥Linux云计算
知识萃取精华,赋能技术人生
93文章数 1055关注度
往期回顾 全部

科技要闻

成功着陆!嫦娥六号将开始月背“挖宝”

头条要闻

牛弹琴:胡塞武装杀疯了 美军现在很无奈有时甚至胆颤

头条要闻

牛弹琴:胡塞武装杀疯了 美军现在很无奈有时甚至胆颤

体育要闻

女排最强2主攻合体 合砍40分打懵泰国

娱乐要闻

白玉兰提名:胡歌、范伟争视帝

财经要闻

新造车5月销量: 小鹏乏力 问界暂"缺席"

汽车要闻

吉利银河E5 Flyme Auto智能座舱首发

态度原创

亲子
健康
房产
手机
公开课

亲子要闻

公婆话里话外让生三胎,儿媳安排公公体验孕期辛苦,结果太意外了

晚餐不吃or吃七分饱,哪种更减肥?

房产要闻

重磅!琼海出台楼市新政:住房出租、挂牌计划出售,都可减套数!

手机要闻

安兔兔5月份性能榜,vivo几乎包圆,OPPO Find X7大亮

公开课

近视只是视力差?小心并发症

无障碍浏览 进入关怀版