一.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
学习使人进步,分享使人快乐;
感谢诸君的支持。