搜索
当前位置: 秒秒彩官网 > 读入原语 >

Go 中 io 包的使用方法

gecimao 发表于 2019-07-20 01:23 | 查看: | 回复:

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

  为此,Go 的io包提供了io.Reader和io.Writer接口,分别用于数据的输入和输出,如图:

  Go 官方提供了一些 API,支持对内存结构,文件,网络连接等资源进行操作

  本文重点介绍如何实现标准库中io.Reader和io.Writer两个接口,来完成流式传输数据。

  io.Reader表示一个读取器,它将数据从某个资源读取到传输缓冲区。在缓冲区中,数据可以被流式传输和使用。

  对于要用作读取器的类型,它必须实现io.Reader接口的唯一一个方法Read(p []byte)。

  Read()方法有两个返回值,一个是读取到的字节数,一个是发生错误时的错误。

  利用Reader可以很容易地进行流式数据传输。Reader方法内部是被循环调用的,每次迭代,它会从数据源读取一块数据放入缓冲区p(即 Read 的参数 p)中,直到返回io.EOF错误时停止。

  下面是一个简单的例子,通过string.NewReader(string)创建一个字符串读取器,然后流式地按字节读取:

  这样做可以让一个Reader重用另一个Reader的逻辑,下面展示通过更新alphaReader以接受io.Reader作为其来源。

  这样做的另一个优点是alphaReader能够从任何 Reader 实现中读取。

  例如,以下代码展示了alphaReader如何与os.File结合以过滤掉文件中的非字母字符:

  io.Writer表示一个编写器,它从缓冲区读取数据,并将数据写入目标资源。

  对于要用作编写器的类型,必须实现io.Writer接口的唯一一个方法Write(p []byte)

  Write()方法有两个返回值,一个是写入到目标资源的字节数,一个是发生错误时的错误。

  下面是一个简单的例子,它使用bytes.Buffer类型作为io.Writer将数据写入内存缓冲区。

  下面我们来实现一个名为chanWriter的自定义io.Writer,它将其内容作为字节序列写入channel。

  如前所述,Go标准库附带了许多有用的功能和类型,让我妈可以轻松使用流式io。

  类型os.File表示本地系统上的文件。它实现了io.Reader和io.Writer,因此可以在任何 io 上下文中使用。

  os包有三个可用变量os.Stdout,os.Stdin和os.Stderr,它们的类型为*os.File,分别代表系统标准输入,系统标准输出和系统标准错误的文件句柄。

  它抽象出for循环模式(我们上面已经实现了)并正确处理io.EOF和 字节计数。

  那么,我们也可以使用io.Copy()函数重写从文件读取并打印到标准输出的先前程序,如下所示:

  数据被写入管道的一端,并使用单独的 goroutine 在管道的另一端读取。

  本文介绍了如何使用io.Reader和io.Writer接口在程序中实现流式IO。

  阅读本文后,您应该能够了解如何使用io包来实现 流式传输IO数据的程序。

  其中有一些例子,展示了如何创建自己的类型,并实现io.Reader和io.Writer。

  例如,我们没有深入文件IO,缓冲IO,网络IO或格式化IO(保存用于将来的写入)。

  原创文章,转载请注明出处:服务器非业余研究-sunface简介这篇介绍了Go的运行时系统——网络I/O部分。阻塞Go语言中,所有的I/O都是阻塞的,因此我们在写Go系统的时候要秉持一个思想:不要写阻塞...博文来自:孙飞的博客

  在前几篇文章中一直讲的都是InputStream,这是操作字节流的类,然而我们在程序中往往要从文件等stream中读取字符信息,如果只用InputStream能否读取字符信息呢?当然可以。但是这涉及到...博文来自:zhao123h的专栏

  概述前面的io包提供了对输入输出设备最基本的抽象,而ioutil在io包的基础上提供了一系列的函数来应对具体的场景。数据读取ioutil一共提供了三个数据读取的函数,分别是:-ReadAll,从一个i...博文来自:preyta的专栏

  概述IO是操作系统的基础概念,是对输入输出设备的抽象。Go语言的io库对这些功能进行了抽象,通过统一的接口对输入输出设备进行操作。ReaderReader对象是对输入设备的抽象,一个Reader可以绑...博文来自:preyta的专栏

  接触到GO之后,GO的网络支持非常令人喜欢。GO实现了在语法层面上可以保持同步语义,但是却又没有牺牲太多性能,底层一样使用了IO路径复用,比如在LINUX下用了EPOLL,在WINDOWS下用了IOC...博文来自:linuxheik的专栏

  golangIO流抽象与应用文章目录golangIO流抽象与应用1、io.go源代码与IO流抽象1.1io包的职责1.2IO操作原语定义与基础接口1.3实用IO处理函数1.4典型的应用结构2、IO抽象...博文来自:pmlpml的专栏

  格式化输入输出从终端获取用户的输入,go提供了三个函数://格式化输入,空格作为分隔符,占位符和格式化输出一致erface{})//从终端获...博文来自:旱鸭子

  本文介绍Go标准库io常用的导出函数,结构体和方法。博文来自:ironxu的专栏

  前言在Go中,输入和输出操作是使用原语实现的,这些原语将数据模拟成可读的或可写的字节流。为此,Go的io包提供了io.Reader和io.Writer接口,分别用于数据的输入和输出,如图:Go官方提供...博文来自:weixin_33976072的博客

  1.如何测试别人的架包a.先找到对应的类-后缀b.看看该类如何创建对象(获取对象,如何调用方法)c.看方法名,揣测方法的意思d.总结测试结果,整理到方法集中2.方法a.获取路径的扩展名(.txt.pn...博文来自:wangsongll的博客

  项目中涉及到一些用户评论和用户可以自定义发布长段文字功能,所以就想到项目中必须要加上文字过滤的功能了。去年做的项目也有评论等功能,等现在的项目没问题就把这个功能加过去!还是直接上代码://获取关键字数...博文来自:u013701108的专栏

  总结下Go的package设计哲学明确目的在准备设计一个包之前,我们需要明确它的目的。包的命名就必须明确体现其目的,而不仅仅是为了存放代码。像标准库的io,http,fmt这些包名就很好,而像util...博文来自:陈鹏万里

  生命不止,继续gogogo!!!读写文件应该是在开发过程中经常遇到的,今天要跟大家一起分享的就是在golang的世界中,如何读写文件。使用io/ioutil进行读写文件先回忆下之前的ioutil包介绍...博文来自:一蓑烟雨任平生 也无风雨也无晴

  在Go语言中处理任何stream数据时,我已经深陷io.Reader和io.Writer的灵活性中不能自拔。同时我在有一点上又或多或少的受了些折磨,挑战我的readerinterface在你看来可能会...博文来自:酱油蔡的酱油坛

  select是Go中的一个控制结构,类似于用于通信的switch语句。每个case必须是一个通信操作,要么是发送要么是接收。select随机执行一个可运行的case。如果没有case可运行,它将阻塞,...博文来自:学无止境

  欢迎来到:Google资深工程师深度讲解Go语言视频地址:Google资深工程师深度讲解Go语言-包和封装封装名字一般使用CamelCase(首字母大写)首字母大写:public首字母小写:priva...博文来自:u010363932的专栏

  importbufiobufio包实现了有缓冲的I/O。它包装一个io.Reader或io.Writer接口对象,创建另一个也实现了该接口,且同时还提供了缓冲和一些文本I/O的帮助函数的对象。目录...博文来自:fei的专栏

  概要在本系列的11章、14章中,讨论了IO游戏同步;并介绍了一种同步方式:每100ms发送一次全量状态包;介绍了作为抗网络波动的优化手段,使用UDP协议来发这个状态包。本章将深入讨论,网络波动下的同步...博文来自:范安崇的博客

  概要说到IO游戏,自然要提到如何同步。好的同步是IO游戏成功的基石。同步分为2类:帧同步和状态同步。本文主要考察状态同步。好的同步如图,第N次主循环后,服务器会把状态发给客户端。客户端在服务器N+1次...博文来自:范安崇的博客

  概述sql.DB不是一个连接,它是数据库的抽象接口。它可以根据driver打开关闭数据库连接,管理连接池。正在使用的连接被标记为繁忙,用完后回到连接池等待下次使用。所以,如果你没有把连接释放回连接池,...博文来自:一只IT小小鸟

  今天写代码的时候,遇到一个问题,如何将数据以二进制的形式写入到jpg文件中,在c++中有wb这样的方式,而我最开始的想法是将[]byte中的每个byte都转换成二进制的字符串形式,然后写入到文件中,但...博文来自:Foylc的博客

  生命不止,继续gogogo!!!其实,早就应该跟大家分享golang中关于websocket的使用,但是一直不知道从何入手,也不能够很清晰的描述出来。今天就浅尝辄止,通过第三方库实现websocket...博文来自:一蓑烟雨任平生 也无风雨也无晴

  生命不止,继续Gogogo.还记得吗,我们之前介绍过ioutil包,今天继续再介绍一下bufio包吧。从字面就看出来了,有buf,那就是缓冲的意思。Packagebufioimplementsbuff...博文来自:一蓑烟雨任平生 也无风雨也无晴

  Go语言中,为了方便开发者使用,将IO操作封装在了如下几个包中:-io为IO原语(I/Oprimitives)提供基本的接口-io/ioutil封装一些实用的I/O函数-fmt实现格式化I/O,类似C...博文来自:Willian

  commons-io是专门为java中的IO流操作而准备的,把常用的操作都封装了起来,我们只要直接用就可以了。下面我们说说常用的操作,应为这些方法都是静态的,所以可以直接调用,而且使用什么功能,从方法...博文来自:的博客

  一:Java.io包1、FileFile类是对文件系统中文件和文件夹进行封装的对象,可以通过对象的思想来操作文件和文件夹。File类保存文件和文件夹的各种元数据信息,包括获取文件信息:文件名(File...博文来自:weixin_29016347的博客

本文链接:http://k-mood.com/duruyuanyu/539.html
随机为您推荐歌词

联系我们 | 关于我们 | 网友投稿 | 版权声明 | 广告服务 | 站点统计 | 网站地图

版权声明:本站资源均来自互联网,如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

Copyright @ 2012-2013 织梦猫 版权所有  Powered by Dedecms 5.7
渝ICP备10013703号  

回顶部