go语言---输入流Reader

本文深入探讨了Go语言中输入流(Reader)的概念与应用,通过实例演示如何使用strings.NewReader和os.Open方法从字符串和文件中读取数据,介绍了字节切片在处理流数据中的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

go语言—Reader
  1. Reader即输入流,那么什么又是流? 流(stream)是应用程序和外部资源进行数据交互的纽带;
  2. 流又分为输入流和输出流;这里的输入和输出都是相对于应用程序而言的,把外部资源输入到应用程序称之为输入流,反之为输出流;
  3. 输入流即Input Stream,输出流即Output Stream,二者合称为I/O流;
  4. go语言中标准库的io包下Reader接口表示输入流,只要实现这个接口就属于输入流;
  5. Reader接口源码:
    type Reader interface {
    	Read(p []byte) (n int, err error)
    }
    
  6. Read方法要读取的是字节类型的切片,所以需要将数据转化为字节切片,可以使用make()方法;切片长度可以从字符串流或者文件对象的属性中获取到;
package main

import (
	"fmt"
	"os"
	"strings"
)

func main() {
	createStrStream()
	readFromFile()
}

func createStrStream()  {
	// 使用strings包下的NewReader创建字符串流
	r := strings.NewReader("Hello World! 你好,世界!")
	b := make([]byte, r.Size())  // 创建字节切片,存放流中数据,根据流数据大小创建切片大小;
	n, err := r.Read(b)
	if err != nil {
		fmt.Println("流数据读取失败!", err)
		return
	}
	fmt.Println("读取的数据长度是: ", n)  // 读取的数据长度是:  27
	fmt.Println("数据内容: ", string(b))  // 以字符串形式显示切片中的数据  // 数据内容:  Hello World! 你好,世界!
}

// 从文件中读取数据,新建一个测试文件,goReader.txt
func readFromFile()  {
	f, _ := os.Open("goReader.txt")
	fileInfo, _ := f.Stat()
	b := make([]byte, fileInfo.Size())
	n, err := f.Read(b)
	if err != nil {
		fmt.Println("数据读取失败, ", err)
		return
	}
	fmt.Println("数据长度是: ", n)  // 数据长度是:  135
	fmt.Println("数据内容是: ", string(b))
	/*
	数据内容是:  1.这里是测试go语言的Reader的文本
	2.这里是测试go语言的Reader的文本
	3.这里是测试go语言的Reader的文本
	 */
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值