为了账号安全,请及时绑定邮箱和手机立即绑定

golang之IO操作

标签:
Go 区块链

图片描述
一.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()
}

实例效果图:
图片描述
(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()
}

效果图:
图片描述

(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中

}

效果如图:
图片描述

二.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)

}

效果图:
图片描述
(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)
}

效果图:
图片描述

更多关于golang相关的代码见github:
https://github.com/JavaCodeMood/go_test

学习使人进步,分享使人快乐;
感谢诸君的支持。

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
JAVA开发工程师
手记
粉丝
1.5万
获赞与收藏
8507

关注作者,订阅最新文章

阅读免费教程

  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消