go语言io reader_golang之IO操作

本文介绍了Go语言中如何进行IO操作,包括读取字符串、从命令行和文件读取数据,以及使用Peek和ReadString方法。此外,还详细讲解了直接读取和通过结构体解析BMP文件的方法。
摘要由CSDN通过智能技术生成

AAffA0nNPuCLAAAAAElFTkSuQmCC

一.golang读取字符串

(1)读取字符串,代码如下:

package main

//字符串读取

import (

"io"

"strings"

"fmt"

)

/**

读取信息

num:读取的字节数量

*/

func ReadFrom(reader io.Reader,num int)([]byte,error){

//创建一个缓冲切片

p := make([]byte, num)

n, err := reader.Read(p)

if n>0{

return p[:n],nil

}

return p,err

}

//字符串读取器

func sampleReadFromString(){

data,_ :=ReadFrom(strings.NewReader("hello golang"),12)

fmt.Println(data)

}

func main(){

sampleReadFromString()

}

实例效果图:

AAffA0nNPuCLAAAAAElFTkSuQmCC

(2)读取从命令窗口输入的字符串,代码如下:

package main

//字符串读取

import (

"io"

"strings"

"fmt"

"os"

)

/**

读取信息

num:读取的字节数量

*/

func ReadFrom(reader io.Reader,num int)([]byte,error){

//创建一个缓冲切片

p := make([]byte, num)

n, err := reader.Read(p)

if n>0{

return p[:n],nil

}

return p,err

}

//字符串读取器

func sampleReadFromString(){

data,_ :=ReadFrom(strings.NewReader("from string"),12)

fmt.Println(data)

}

//从命令行读取字符串

func sampleReadStdin(){

fmt.Println("请输入一个字符串")

//调用命令行,读取11个字符

data,_:= ReadFrom(os.Stdin,11)

fmt.Println(data)

}

//从文件读取字符

func sampleReadFile(){

//打开文件

file,_ := os.Open("go_io.go")

//关闭文件

defer file.Close()

data,_ := ReadFrom(file, 10)

fmt.Println(data)

}

func main(){

//sampleReadFromString()

sampleReadStdin()

//sampleReadFile()

}

效果图:

AAffA0nNPuCLAAAAAElFTkSuQmCC

(3)使用Peek()和ReadString()读取数据,代码如下:

package main

//字符串读取

import (

"strings"

"bufio"

"fmt"

"os"

)

func main(){

strReader := strings.NewReader("hello world")

bufReader := bufio.NewReader(strReader)

//1.使用Peek()方法读取数据,只读,不会改变缓冲的大小

data,_ := bufReader.Peek(10)

fmt.Println(data)

//bufReader.Buffered() 返回字节个数, 抓取缓冲数据

fmt.Println(string(data), bufReader.Buffered())

//2.使用ReadString()读取数据,读取到空格为止

str,_ := bufReader.ReadString(' ')

fmt.Println(str, bufReader.Buffered())

str1,_ := bufReader.ReadString(4)

fmt.Println(str1)

//写出到输出设置中

w := bufio.NewWriter(os.Stdout) //输出

fmt.Fprint(w, "hello") //写入到bufio中

fmt.Fprint(w, " world!")

w.Flush() //真正写入到Stdout中

}

效果如图:

AAffA0nNPuCLAAAAAElFTkSuQmCC

二.golang读取bmp文件

(1)直接读取bmp文件,代码如下:

package main

import (

"os"

"encoding/binary"

"fmt"

)

//go语言读取bmp文件

func main(){

//读取bmp文件

file,_ := os.Open("timg.bmp")

defer file.Close()

var headA,headB byte

//对二进制进行封装,读取文件头

binary.Read(file, binary.LittleEndian, &headA)

binary.Read(file, binary.LittleEndian, &headB)

//文件大小

var size uint32

binary.Read(file, binary.LittleEndian, &size)

//保留的字节

var reservedA, reservedB byte

binary.Read(file,binary.LittleEndian,&reservedA)

binary.Read(file,binary.LittleEndian,&reservedB)

//偏移数

var offbits uint32

binary.Read(file,binary.LittleEndian,&offbits)

fmt.Println("headA = ", headA, "headB = ", headB)

fmt.Println("size =" , size)

fmt.Println("reservedA = ",reservedA,"reservedB = ", reservedB)

fmt.Println("offbits = ", offbits)

}

效果图:

AAffA0nNPuCLAAAAAElFTkSuQmCC

(2)创建结构体读取bmp文件,代码如下:

package main

import (

"encoding/binary"

"os"

"fmt"

)

//go语言读取bmp文件

//bmp文件信息

type BitmapInfoHeader struct {

Size uint32 //文件大小

Width int32 //文件宽度

Height int32 //文件高度

Places uint16 //文件面数

BitCount uint16 //每一个像素所占字节数

Compression uint32 //压缩方式

SizeImage uint32 //图片数据大小

XperlsPerMeter int32 //水平分辨率

YperlsPerMeter int32 //垂直分辨率

ClusUsed uint32 //颜色数

ClrImportant uint32

}

func main(){

//实例化

infoHeader := new(BitmapInfoHeader)

//读取bmp文件

file,_ := os.Open("timg.bmp")

defer file.Close()

binary.Read(file,binary.LittleEndian, infoHeader)

fmt.Println(infoHeader)

}

效果图:

AAffA0nNPuCLAAAAAElFTkSuQmCC

学习使人进步,分享使人快乐;

感谢诸君的支持。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值