美文网首页
Golang I/O笔记

Golang I/O笔记

作者: yaya_pangdun | 来源:发表于2016-05-06 18:17 被阅读160次

1. 基础

str := fmt.Sprintf("num is %f", 3.1415926)

fmt.Fprintln(os.Stdout, "hello\n")

2. 结构体输出

type Data struct {

}
func (self Data) String() string {
  return "data"
}

3. 基本的IO接口

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
}

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

命令行读取输入

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

文件中读取

file, _ := os.Open("main.go")
defer file.Close()
data, _ = ReadFrom(file, 9)

缓冲IO

strReader := strings.NewReader("helloworld")
bufReader := bufio.NewReader(strReader)

data, _ := bufReader.Peek(5) //返回缓冲区的5个字节

i := bufReader.Buffered() //返回缓冲区缓冲了多少个字节

str, _ := bufReader.ReadString(' ') //利用空格切割,返回string

//写
w := bufio.NewWriter(os.stdOut)
fmt.Fprint(w, "Hello ")
w.Flush() //刷新缓冲

统计文件行数

func main() {
  if len(os.Args) < 2 {
    return
  }
  filename := os.Args[1]
  file, _ := op.Open(filename)

  if err != nil {
    fmt.Println(err)
    return
  }
  defer file.Close()
  
  reader := bufio.NewReader(file)
  
  line := 0
  for {
   _,isPrefix,err := reader.ReadLine()
  if err != nil {
    break
  }
  if !isPrefix {//如果一行过长的时候isPrefix == true
    line++
  }
  }
}

二进制文件的读取

//图片
img, _ := os.Open("image.png")
defer img.Close()

var headA,headB byte
binary.Read(img, binary.BigEndian, &headA )
binary.Read(img, binary.BigEndian, &headB )

var size uint32
binary.Read(img, binary.BigEndian, &size )

var reversedA, reversedB uint16
binary.Read(img, binary.BigEndian, &reversedA )
binary.Read(img, binary.BigEndian, &reversedA )

var offbits uint32
binary.Read(img, binary.BigEndian, &offbits )

利用struct读取文件头

type bitmapHeader struct {
  Size uint32
  Width int32
  Height int32
  Places uint16
  BitCount uint16
  Compression uint32
  SizeImage uint32
  XperlsPerMeter int32
  YperlsPerMeter int32
  ClsrUsed uint32
  ClrImportant uint32
}
bitmapInfoHeader := new(bitmapHeader)
binry.Read(image, binary.BigEndian, bitmapInfoHeader)

相关文章

  • Golang I/O笔记

    1. 基础 2. 结构体输出 3. 基本的IO接口 命令行读取输入 文件中读取 缓冲IO 统计文件行数 二进制文件...

  • select I/O多路复用

    select golang的并发模型和linux select类似golang提供了select关键字,实现I/O...

  • Golang fmt格式“占位符”

    golang 的fmt 包实现了格式化I/O函数,类似于C的 printf 和 scanf。 golang没有 '...

  • Linux 磁盘I/O基础知识总结

    本文用于对一些基础磁盘I/O知识的总结。 目录索引 磁盘I/O那些事 总结思维导图 磁盘I/O学习笔记 磁盘I/O...

  • Netty 权威指南笔记(一):网络 I/O 模型和 Java

    Netty 权威指南笔记(一):网络 I/O 模型和 Java IO 入门 Java I/O 模型的实现离不开底层...

  • node.js入门笔记一: 环境、调试

    node.js入门笔记一: 环境、调试 简介 非阻塞I/O 阻塞:I/O时进程休眠等待I/O完成后进入下一步 非阻...

  • I/O模型笔记

    #0 同步异步、阻塞非阻塞 同步异步是从消息通知机制角度来说的 阻塞与非阻塞是从程序(线程)等待消息通知时的状态角...

  • 异步I/O笔记

    1.为什么要异步I/O Node既可以作为服务器端去处理客户端带来的大量并发请求,也能作为客户端对网络中的各个应用...

  • I/O流笔记

    一: 万物皆字节 一切文本、图片、视频都是以二进制进行储存,都是一个个字节,所以字节流可以传输任何文件。 文本编辑...

  • golang fmt格式“占位符”

    golang 的fmt 包实现了格式化I/O函数,类似于C的 printf 和 scanf。 # 定义示例类型和变...

网友评论

      本文标题:Golang I/O笔记

      本文链接:https://www.haomeiwen.com/subject/syejrttx.html