WriteString

// WriteString
// WriteString 将字符串 s 写入到 w 中,返回写入的字节数和写入过程中遇到的任何错误
// 如果 w 实现了 WriteString 方法,则调用 w 的 WriteString 方法将 s 写入 w 中
// 否则,将 s 转换为 []byte,然后调用 w.Write 方法将数据写入 w 中
// func WriteString(w Writer, s string) (n int, err error)func main() {// os.Stdout 实现了 Writer 接口io.WriteString(os.Stdout, "Hello World!")// Hello World!
}

ReadAtLeast

// ReadAtLeast 从 r 中读取数据到 buf 中,要求至少读取 min 个字节
// 返回读取的字节数 n 和读取过程中遇到的任何错误
// 如果 n < min,则 err 返回 ErrUnexpectedEOF
// 如果 r 中无可读数据,则 err 返回 EOF
// 如果 min 大于 len(buf),则 err 返回 ErrShortBuffer
// 只有当 n >= min 时 err 才返回 nil
// func ReadAtLeast(r Reader, buf []byte, min int) (n int, err error)func main() {r := strings.NewReader("Hello World!")b := make([]byte, 32)n, err := io.ReadAtLeast(r, b, 20)fmt.Printf("%s\n%d, %v", b, n, err)// Hello World!// 12, unexpected EOF
}

ReadFull

// ReadFull 的功能和 ReadAtLeast 一样,只不过 min = len(buf),
// 其中要求最少读取的字节数目是len(buf),当r中数据少于len(buf)时便会报错
// func ReadFull(r Reader, buf []byte) (n int, err error)func main() {r := strings.NewReader("Hello World!")b := make([]byte, 32)n, err := io.ReadFull(r, b)fmt.Printf("%s\n%d, %v", b, n, err)// Hello World!// 12, unexpected EOF
}

CopyN

// CopyN 从 src 中复制 n 个字节的数据到 dst 中
// 它返回复制的字节数 written 和复制过程中遇到的任何错误
// 只有当 written = n 时,err 才返回 nil
// 如果 dst 实现了 ReadFrom 方法,则调用 ReadFrom 来执行复制操作
// func CopyN(dst Writer, src Reader, n int64) (written int64, err error)func main() {r := strings.NewReader("Hello World!")n, err := io.CopyN(os.Stdout, r, 20)fmt.Printf("\n%d, %v", n, err)// Hello World!// 12, EOF
}

Copy

// Copy 从 src 中复制数据到 dst 中,直到所有数据复制完毕
// 返回复制过程中遇到的任何错误
// 如果数据复制完毕,则 err 返回 nil,而不是 EOF
// 如果 dst 实现了 ReadeFrom 方法,则调用 dst.ReadeFrom(src) 复制数据
// 如果 src 实现了 WriteTo 方法,则调用 src.WriteTo(dst) 复制数据
func Copy(dst Writer, src Reader) (written int64, err error)func main() {r := strings.NewReader("Hello World!")n, err := io.Copy(os.Stdout, r)fmt.Printf("\n%d, %v", n, err)// Hello World!// 12, <nil>
}

LimitReader

// LimitReader 覆盖了 r 的 Read 方法
// 使 r 只能读取 n 个字节的数据,读取完毕后返回 EOF
// func LimitReader(r Reader, n int64) Reader
// LimitedReader 结构用来实现 LimitReader 的功能
// type LimitedReader structfunc main() {r := strings.NewReader("Hello World!")lr := io.LimitReader(r, 5)n, err := io.CopyN(os.Stdout, lr, 20)fmt.Printf("\n%d, %v", n, err)// Hello// 5, EOF
}

NewSectionReader

// NewSectionReader 封装 r,并返回 SectionReader 类型的对象
// 使 r 只能从 off 的位置读取 n 个字节的数据,读取完毕后返回 EOF
// func NewSectionReader(r ReaderAt, off int64, n int64) *SectionReader// SectionReader 结构用来实现 NewSectionReader 的功能
// SectionReader 实现了 Read、Seek、ReadAt、Size 方法
// type SectionReader struct// Size 返回 s 中被限制读取的字节数
// func (s *SectionReader) Size()func main() {r := strings.NewReader("Hello World!")sr := io.NewSectionReader(r, 0, 5)n, err := io.CopyN(os.Stdout, sr, 20)fmt.Printf("\n%d, %v", n, err)fmt.Printf("\n%d", sr.Size())// World// 5, EOF// 5
}

TeeReader

// TeeReader 覆盖了 r 的 Read 方法
// 使 r 在读取数据的同时,自动向 w 中写入数据
// 所有写入时遇到的错误都被作为 err 返回值
// func TeeReader(r Reader, w Writer) Readerfunc main() {r := strings.NewReader("Hello World!")tr := io.TeeReader(r, os.Stdout)b := make([]byte, 32)tr.Read(b)// World World!
}

Go的io/ioutil相关推荐

  1. Go 学习笔记(49)— Go 标准库之 io/ioutil(读写文件、获取目录下的文件和子目录、创建临时目录和文件)

    1. 简要概述 import "io/ioutil" 包 io/ioutil 实现一些 I/O 实用程序函数. 2. 相关函数 2.1 func ReadAll func Read ...

  2. java中IOUtil.readLong_使用io/ioutil进行读写文件

    读文件: package main import ( "fmt" "io/ioutil" ) func main() { b, err := ioutil.Re ...

  3. golang中io/ioutil.readdir和path/filepath.walk遍历获取目录下文件性能比较

    在使用golang进行开发,获取当前目录下文件或文件列表时候有两种库方法可以供使用.但是那种性能好,在网上没有找到详细的描述,因此自己写了两个函数,进行了下比较.最终发现ioutil的效率要高很高. ...

  4. go语言io和ioutil包的学习和使用

    io包 package main;import ("errors""fmt""io" )//io包中定义了非常多的interface //只 ...

  5. Java 文件复制 Hutool IO使用

    文件读写操作 我要将这张照片复制一份. 原生Java代码方式 package com.hutool; import java.io.*; /*** @Author: crush* @Date: 202 ...

  6. 如何从io.Reader 中读数据

    女主宣言 Go语言以其本身具有的高并发特性,在云计算开发中,得到了广泛的应用,也深受广大开发者的欢迎.但是大家对go语言真的理解了么?本文作者经过对go语言的多年实践应用,现对go语言中如何从io.R ...

  7. 浅析 Go IO 的知识框架

    Go 和 IO 的不解之缘? Go 是一种高性能的编译性语言,天然支持高并发,语言级别封装协程,号称可以支持成千上万,十万,甚至百万的协程并发.这个量级远不是线程可比的. 前置小知识点:并行和并发的区 ...

  8. go 输入输出流(ioutil)

    虽然 io 包提供了不少类型.方法和函数,但有时候使用起来不是那么方便.比如读取一个文件中的所有内容.为此,标准库中提供了一些常用.方便的IO操作函数. 说明:这些函数使用都相对简单,一般就不举例子了 ...

  9. 002-Go通过ioutil 读写文件

    1.读取文件内容 package mainimport("io/ioutil""fmt" )func main(){b,err := ioutil.ReadFi ...

最新文章

  1. JavaEE SSH集成框架(两) struts2 本地加载dtd文件,action组态
  2. VMware(VMDebugger)导致VS2010启动慢的解决办法
  3. Google Maps API 2.0解析(3-GEvent事件功能支持)
  4. 这五种 Python 字符串连接方式,你都知道吗?
  5. 打开计算机后 无法最小化,最小化窗口后无法在任务栏中显示的三种解决方法...
  6. 适合 Kubernetes 初学者的一些实战练习 (五)
  7. Linux 初始化系统(系统服务管理和控制程序/Init System) -- System V init(SysV init) 的简单理解
  8. @Autowired作用在普通方法上
  9. python创建docx文件
  10. 8.29 脏检查笔记
  11. ubuntu 黑体_Ubuntu 10.04下安装字体最简单的方法
  12. 图像处理--字模放大
  13. Mac 双系统之windows坏了咋办
  14. html5中正则表达式怎么加,HTML5中的字母正则表达式(Alphabetic Regex in HTML5)
  15. npm jdf压缩并上传静态文件到服务器
  16. 一般来说仿制一个网站大概需要多少钱呢
  17. 烟火高桥蝶变“中非商港”,开放雨花引领国际商贸
  18. C语言(二十三)auto自动变量
  19. 年终总结:2021年最有用的数据清洗 Python 库
  20. EAX、ESP、EBP等寄存器的作用

热门文章

  1. 南山中学2021级2班高考成绩查询,绵阳南山中学双语学校2021年排名
  2. 如何建立java ssm工程_如何搭建一个ssm项目
  3. Python 中各种imread函数的区别与联系
  4. SQLServer之创建唯一聚集索引
  5. shell中的$()、${}、$(())、(())
  6. 如何设计企业内部的数据平台?
  7. 驰骋工作流引擎表单设计控件-字段类控件(2)
  8. 《看门狗》真人版跑酷!
  9. SpringMVC+Hibernate +MySql+ EasyUI实现POI导出Excel(二)
  10. 微软职位内部推荐-Android Developer