go中区别Read和ReadAt

  • 一、os.Read()
  • 二、os.ReadAt()
  • 三、os.Read()和os.ReadAt()区别及注意事项

一、os.Read()

// Read reads up to len(b) bytes from the File.
// It returns the number of bytes read and any error encountered.
// At end of file, Read returns 0, io.EOF.
func (f *File) Read(b []byte) (n int, err error) {if err := f.checkValid("read"); err != nil {return 0, err}n, e := f.read(b)return n, f.wrapErr("read", e)
}

os.Read()传入一个buffer,返回读取多少行及错误
如果读完,则返回0和io.EOF

二、os.ReadAt()

// ReadAt reads len(b) bytes from the File starting at byte offset off.
// It returns the number of bytes read and the error, if any.
// ReadAt always returns a non-nil error when n < len(b).
// At end of file, that error is io.EOF.
func (f *File) ReadAt(b []byte, off int64) (n int, err error) {if err := f.checkValid("read"); err != nil {return 0, err}if off < 0 {return 0, &PathError{"readat", f.name, errors.New("negative offset")}}for len(b) > 0 {m, e := f.pread(b, off)if e != nil {err = f.wrapErr("read", e)break}n += mb = b[m:]off += int64(m)}return
}
  • os.ReadeAt()传入两个参数,一个是buffer(一个[]byte),一个偏移量(即偏移行数)
  • 返回两个参数,一个行数,一个错误,如果读完,则返回os.EOF

三、os.Read()和os.ReadAt()区别及注意事项

1.os.Read()的四种返回状态

  • 1.读取成功,返回读取多少行,err != nil
  • 2.如果读取到失败了,err != nil,这个时候err返回响应的错误。
  • 3.如果读取到EOF,err == EFO ,n是读到的数据大小
  • 4.如果读取过程中,数据还没有准备好,返回的err 为nil;没有读满buffer,也不是EOF。此时代码不报错

2.os.ReadAt()的三种返回值状态

  • 1.读取成功,返回读取多少行,err != nil
  • 2.如果读取到失败了,err != nil,这个时候err返回响应的错误。
  • 3.如果读取到EOF,err == EFO ,n是读到的数据大小

3.总结

  • 总的来说,Read()比ReadAt()更加严格。Read使用可能会造成一定的风险。

Golang中os.Reader和ReaderAt的区别,及ReaderAt快速读取日志文件的实现相关推荐

  1. python中sys用法_python中os和sys模块的区别与常用方法总结

    python 的 python中os和sys模块的区别与常用方法总结 前言 本文主要介绍了关于python中os和sys模块区别与常用方法的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看 ...

  2. golang中os/signal包的使用

    golang中os/signal包的使用 os/signal包实现对信号的处理 golang中对信号的处理主要使用os/signal包中的两个方法:一个是notify方法用来监听收到的信号:一个是 s ...

  3. 安装补丁出现0xC8000222错误和系统日志中wuaueng.dll SUS20ClientDataStore 无法读取日志文件的错误...

    使用金山卫士为系统打补丁的时候,发现有很多补丁都被忽略了,当时我就觉得奇怪.昨天在偶然的机会里,查看Windows应用程序日志中的记录时(右击我的电脑,选择"管理",找到系统工具- ...

  4. php_os用法,golang中os包用法

    os包中实现了平台无关的接口,设计向Unix风格,但是错误处理是go风格,当os包使用时,如果失败之后返回错误类型而不是错误数量. os包中函数设计方式和Unix类似,下面来看一下. func Chd ...

  5. python中的sys模块和os_python中os和sys模块的区别与常用方法总结

    前言 本文主要介绍了关于python中os和sys模块区别与常用方法的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. 官方解释: os: This module provi ...

  6. golang中,new和make的区别

    在golang中,make和new都是分配内存的,但是它们之间还是有些区别的,只有理解了它们之间的不同,才能在合适的场合使用. 简单来说,new只是分配内存,不初始化内存: 而make即分配又初始化内 ...

  7. jsp页面判断输入编号已存在mysql中_面试官让我聊聊Mysql基础架构之日志文件与数据文件...

    上一篇文章讲述了Mysql的基本框架,和sql执行的流程,这篇文章首先分析下每个流程的具体细节,然后介绍日志文件和数据文件以下面语句作为例子来分析流程中每一步的具体细节: select * from ...

  8. 用python读取txt文件中的数据并画各类图形展示_Python实现读取txt文件中的数据并绘制出图形操作示例...

    本文实例讲述了Python实现读取txt文件中的数据并绘制出图形操作.分享给大家供大家参考,具体如下: 下面的是某一文本文件中的数据. 6.1101,17.592 5.5277,9.1302 8.51 ...

  9. 计算机考试中画图不能处理的格式,解决画图程序无法读取该文件。无效的位图文件或不支持文件的格式的方法...

    画图是每一个windows系统中都有的程序,虽然这个程序一直没有添加很多新的功能,但是基础功能已经够我们日常使用了.很多图片需要添加文字或是截取大小的时候我们经常会使用画图功能来进行操作.最近有位朋友 ...

最新文章

  1. python socket sendto sendall_网络通信 Python Socket UDP Select
  2. C#中将list进行二进制序列化并保存数据到文件
  3. Java线程池--拒绝策略RejectedExecutionHandler
  4. XTU 1250 Super Fast Fourier Transform
  5. SAP Fiori里Contact Support的按钮渲染逻辑
  6. 网络知识:内网、外网、宽带、带宽、流量、网速之间的联系?
  7. 基于Prometheus的.NET 4.x应用服务监控
  8. [html] 要减少DOM的数量有什么办法吗?
  9. POSIX多线程API函数
  10. java8 foreach 异常_错误处理 – 在java 8流foreach中抛出异常
  11. BIP与Siebel系统集成
  12. swper插件:刷新页面,banner轮播图出不来
  13. 折腾nock给jsonp进行单元测试
  14. 视频监控系统中H.265、SVAC、GB/T28181、ONVIF、PSIA有什么区别?
  15. 无代码开发+MES管理系统双向奔赴,MES进化新方向
  16. 华为云弹性云服务器助力打造更安全可靠、灵活高效的云空间
  17. 2022年自考专业考试(英语)英语翻译练习题
  18. 华为鸿蒙os对比安卓系统,华为手机鸿蒙OS 2.0、EMUI 11界面对比:安卓底层没了
  19. matlab中不同数据点的动态显示并生成gif图片
  20. 四步完成离线部署wvs

热门文章

  1. vpwm的控制变频_变频器常用的几种控制方式
  2. 网页不能复制文本的解决办法
  3. 常微分方程王高雄第三版--第二章一阶微分方程的初等解法--Julia实现
  4. CSS实现: 水平居中 的几种方法
  5. 计算机快捷键桌布,桌面改造 篇三:编程娱乐两不误 | 伪程序猿的Windows双屏组建/效率工具/桌面美化指南...
  6. 详细教程|电脑上删除的照片如何恢复?
  7. python 图片拼接_使用Python拼接多张图片
  8. macos 开发工具_10个面向高级用户和开发人员的必备macOS工具
  9. HISAT2+STRINGTIE+BALLGOWN 分析转录组数据
  10. 鼠标滑轮,上下滑动变成了音量控制键?