go语言io reader_go语言之IO操作(待补充)

前言

在Go中,输入和输出操作都是使用原语实现的,原语将数据模拟成可读的或者可写的字节流。

而Go的io包提供了io.Reader(将数据从某个资源读取到传输缓冲区被流式传输和使用)和io.Writer(从缓冲区读取数据,并写入目标资源)接口。实现了io.Reader接口的唯一方法Read(p []byte)(n int, err error),它就是一个读取器。n 读取到的字节数

err 发生错误的信息(注意:资源读取完毕返回io.EOF错误)

使用Reader

思路: Reader方法内部是循环被调用的,每次迭代都会从数据源取一块数据放入缓冲区p,资源读取完毕返回io.EOF错误为止。

我们通过strings.NewReader(string) 创建一个字符串读取器来迭代读取:package main

import (

"fmt"

"io"

"os"

"strings"

)

func main() {

//创建一个字符串读取器

reader := strings.NewReader("How are you today You were in a bad mood yesterday")

//创建一个长度为3的切片

p := make([]byte, 3)

//循环取数据

for {

//读取到的字节数,err 发生错误的信息(注意:资源读取完毕返回io.EOF错误)

n, err := reader.Read(p)

if err != nil {

if err == io.EOF {

fmt.Println("The resource is read!")

break

}

fmt.Println("Read err :", err.Error())

os.Exit(1)

}

fmt.Println(string(p[:n]), p[:n])

}

}

输出打印的内容:How [72 111 119]

ar [32 97 114]

e y [101 32 121]

ou [111 117 32]

tod [116 111 100]

ay [97 121 32]

You [89 111 117]

we [32 119 101]

re [114 101 32]

in [105 110 32]

a b [97 32 98]

ad [97 100 32]

moo [109 111 111]

d y [100 32 121]

est [101 115 116]

erd [101 114 100]

ay [97 121]

The resource is read!

拓展例子(读取文件行数并且打印每一行内容和二进制流)package main

import (

"bufio"

"fmt"

"os"

"time"

)

func main() {

if len(os.Args) < 2 {

os.Exit(1)

}

filename := os.Args[1]

file, err := os.Open(filename)

defer file.Close()

if err != nil {

fmt.Println(err.Error())

os.Exit(1)

}

reader := bufio.NewReader(file)

var line int

fmt.Print("下面为你读取",filename,"每一行的内容:\n")

for {

lineContent, isPrefix, err := reader.ReadLine()

if err != nil {

break

}

if !isPrefix {

line++

time.Sleep(time.Second*1)

fmt.Println("第",line,"行的二进制数据流为:", lineContent,"内容是:",string(lineContent))

fmt.Print("\n")

}

}

fmt.Println("名字为:",filename,"的文件一共有:", line,"行")

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/308556.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ABPHelper.CLI及其依赖项简单介绍

图片gif无法查看&#xff0c;请查看原文至博客园查看详情。目录目录ABPHelper.CLIScriban通过Microsoft.Extensions.FileProviders.Embedded获取嵌入资源通过静态方法获取文件内容使用Microsoft.Extensions.FileProviders.Physical获取文件内容Microsoft.CodeAnalysis.CSharpHu…

文件的创建与读取 文件的数据添加

文件的创建与读取 文件的数据添加 一&#xff1a;概要 1&#xff1a;首先要站在程序的角度上。 2&#xff1a;文件的创建 即将程序中的数据 写入到文件当中。 3&#xff1a;文件的读取 即将一个文件中的信息读取到程序当中。 二&#xff1a;步骤 1&#xff1a;创建文件…

[RabbitMQ]整合SpringBoot

整合SpringBoot 创建项目 引入依赖 <dependencies><!--RabbitMQ 依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-amqp</artifactId></dependency><dependency><…

mysql 固定符号分列显示_MySql中指定符号分割并分行展示

1.涉及到的函数三个&#xff1a;1.1 REPLACE(value,str1,str2)用法规则&#xff1a;使用str2替换掉value中的所有的str1;SELECT REPLACE(我来了,来,走)执行结果如下&#xff1a;1.2 LENGTH(str)用法规则&#xff1a;获取字符串的长度&#xff0c;使用 uft8(UNICODE 的一种变长字…

​设计模式之装饰模式

装饰模式 DecoratorIntro装饰模式&#xff0c;动态地给一个对象添加一些额外的职责&#xff0c;就增加功能来说&#xff0c;装饰模式比生成子类更为灵活装饰模式又被称为装饰器模式或装饰者模式使用场景装饰模式是为已有功能动态地添加更多功能的一种方式当系统需要新功能的时候…

C++中 Map的了解与基本用法(代码演示+自我总结+map中一对多的用法)

C中 map的了解与基本用法&#xff08;代码演示&#xff09; 一&#xff1a;map的基本认识 Map是STL的一个关联容器&#xff0c;它提供一对一&#xff08;其中第一个可以称为关键字&#xff0c;每个关键字只能在map中出现一次&#xff0c;第二个可能称为该关键字的值&#xff…

[Redis6]跳跃表(跳表)

跳跃表(跳表) 简介 有序集合在生活中比较常见&#xff0c;例如根据成绩对学生排名&#xff0c;根据得分对玩家排名等。对于有序集合的底层实现&#xff0c;可以用数组、平衡树、链表等。数组不便元素的插入、删除&#xff1b;平衡树或红黑树虽然效率高但结构复杂&#xff1b;…

mysql 5.5 免安装_mysql 5.5.56免安装版配置方法

mysql 5.5.56免安装版配置方法&#xff0c;本文通过文字代码详解&#xff0c;具体内容如下所示&#xff1a;1. 下载mysql-5.5.56-winx64网址: dev.mysql.com/downloads/mysql/2. 解压MySQL压缩包将以下载的MySQL压缩包解压到自定义目录下,我的解压目录是:"D:\Program File…

ASP.NET Core中的响应压缩

介绍响应压缩技术是目前Web开发领域中比较常用的技术&#xff0c;在带宽资源受限的情况下&#xff0c;使用压缩技术是提升带宽负载的首选方案。我们熟悉的Web服务器&#xff0c;比如IIS、Tomcat、Nginx、Apache等都可以使用压缩技术&#xff0c;常用的压缩类型包括Brotli、Gzip…

7-14 电话聊天狂人 (25 分)map做法 + 详解 + 思路分析

7-14 电话聊天狂人 (25 分)map做法 1&#xff1a;题目 给定大量手机用户通话记录&#xff0c;找出其中通话次数最多的聊天狂人。 输入格式: 输入首先给出正整数N&#xff08;≤10 ​5 ​​ &#xff09;&#xff0c;为通话记录条数。随后N行&#xff0c;每行给出一条通话记录…

[Redis6]配置文件详解

配置文件 单位 配置大小单位,开头定义了一些基本的度量单位&#xff0c;只支持bytes&#xff0c;不支持bit 大小写不敏感 INCLUDES包括 类似jsp中的include&#xff0c;多实例的情况可以把公用的配置文件提取出来 网络相关配置 bind 默认情况bind127.0.0.1只能接受本机的…

连接不上mysql 1045_技术分享 | MySQL 客户端连不上(1045 错误)原因全解析

原创作者&#xff1a; 管长龙 译作者&#xff1a;Carlos Tutte、Marcos Albe 翻译&#xff1a;管长龙在我们学习 MySQL 或从事 MySQL DBA 工作期间&#xff0c;时常会遇到&#xff1a;“我尝试连接到 MySQL 并且收到1045 错误&#xff0c;但我确定我的用户和密码都没问题”。不…

JWT是个什么鬼?

【答疑解惑】| 作者 / Edison Zhou这是恰童鞋骚年的第269篇原创内容前面一篇我们了解了微服务安全认证架构是如何演进而来的&#xff0c;但是发现v2.5架构仍然较重&#xff0c;有没有轻量级一点的方法呢&#xff1f;其实业界早已有了实践&#xff0c;它就是基于JWT的安全认证架…

java中编译类型的方法 和 运行时的类型方法 有什么区别

1&#xff1a;引言 这是在复习多态当中&#xff0c;看到不太理解的东西&#xff0c; 就是 Java编译类型和运行类型 2&#xff1a;多态 多态首先得是在 有继承关系和方法重写的类当中&#xff1b;指同一个方法在被调用时&#xff0c;由于对象不同则会有不同的效果&#xff08…

[Redis6]发布和订阅

Redis6的发布和订阅 什么是发布和订阅 Redis 发布订阅 (pub/sub) 是一种消息通信模式&#xff1a;发送者 (pub) 发送消息&#xff0c;订阅者 (sub) 接收消息。 Redis 客户端可以订阅任意数量的频道。 发布订阅命令行实现 打开一个客户端订阅channel1 打开另一个客户端&…

mysql innodb log_教你如何理解mysql中的innoDB log

前言:之前一直弄不清楚mysql里面bin log和innodb log文件的区别&#xff0c;在脑子里面一直有个疑问binlog日志文件已经可以用来进行数据库的日志备份恢复了&#xff0c;怎么又多了一个redo log文件了。相信也有很多人有这个疑惑&#xff0c;现在把整个过程文档整理出来&#x…

解决Java当中 用point 画图时背景颜色变成黑色问题

一&#xff1a;导入与源码 package src.cn.wyj.飞机;import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.JFrame;public class MyGame1 extends JF…

微服务框架Demo.MicroServer运行手册

一.背景说明&#xff1a;之前分享过一个微服务开发框架&#xff0c; “分享一个集成.NET CoreSwaggerConsulPollyOcelotIdentityServer4ExceptionlessApolloSkyWalking的微服务开发框架”&#xff0c;前两天在Github上收到一个Issues&#xff0c;是想我这边提供下完整的运行文档…

[Redis6]新数据类型_Bitmaps

Bitmaps 简介 现代计算机用二进制&#xff08;位&#xff09; 作为信息的基础单位&#xff0c; 1个字节等于8位&#xff0c; 例如“abc”字符串是由3个字节组成&#xff0c; 但实际在计算机存储时将其用二进制表示&#xff0c; “abc”分别对应的ASCII码分别是97、 98、 99&a…

mysql qps如何查看_一款查看mysql QPS的脚本

本脚本黏贴就可以使用绝对不坑人&#xff01;&#xff01;&#xff01;(此脚本来源如一位大神网友)执行效果&#xff1a;脚本&#xff1a;#!/bin/bashPWEqipay20150504mysqladmin -P3306 -uroot -p$PW -r -i 1 ext |\awk -F"|" \"BEGIN{ count0; }"\{ if($…