Go语言学习四:I/O

Go 语言I/O 涉及两大部分 :I/O ,File

一  I/O 

/**

bufio包实现了有缓冲的I/O。它包装一个io.Reader或io.Writer接口对象,

创建另一个也实现了该接口,且同时还提供了缓冲和一些文本I/O的帮助函数的对象。

*/

functestBufio()  {

//r:=strings.NewReader("hello,world")

//rd:=bufio.NewReader(r)

//

//p:=make([]byte,30)

//rd.Read(p)

//fmt.Println(string(p))

w:=bufio.NewWriter(bytes.NewBuffer(make([]byte,0)))

w.WriteString(" nihao")

w.Flush()

fmt.Println(w.Buffered())

}

/**

bytes 包 下的 reader  、 buffer

buffer实现了 bufio包中 reader 、writer 接口

*/

functestBytes()  {

r:=bytes.NewReader([]byte("hello"))

b:=make([]byte,2)

r.Read(b)

fmt.Println(r.Size())

fmt.Println(r.Len())

buffer:=bytes.NewBufferString("hello,world")

fmt.Println(buffer.Len())

buffer.WriteString(" sunhongtao")

fmt.Println(buffer.String())

}

/**

io包提供了对I/O原语的基本接口。本包的基本任务是包装这些原语已有的实现(如os包里的原语),

使之成为共享的公共接口,这些公共接口抽象出了泛用的函数并附加了一些相关的原语的操作。

因为这些接口和原语是对底层实现完全不同的低水平操作的包装,

除非得到其它方面的通知,客户端不应假设它们是并发执行安全的。

*/

functestIO()  {

w:=bufio.NewWriter(bytes.NewBufferString("hello"))

io.WriteString(w,"world")

w.Flush()

b,_:=ioutil.ReadAll(bytes.NewBufferString("nihao"))

fmt.Println(string(b))

s,_:=ioutil.ReadFile("E:\\hello.txt")

fmt.Println(string(s))

ioutil.WriteFile("E:\\hello.txt",[]byte("welcome"),7777)

}

二 File 

funccreateFile() {

file,e := os.Create("E://hello.txt")

ife != nil {

panic(e)

}

deferfile.Close()

file.WriteString("hello,world")

fmt.Println(file.Name())

}

funcreadFile() {

file,err := os.Open("e://hello.txt")

iferr != nil {

panic(err)

}

deferfile.Close()

//方案一

//by,_:=ioutil.ReadAll(file)

//fmt.Println(string(by))

//方案二

buffer := bytes.NewBufferString("")

varb =make([]byte,100)

for{

n,e := file.Read(b)

fmt.Println(n)

ife != nil && e != io.EOF {

panic(e)

}

ifn >0&& n <=len(b) {

buffer.Write(b[:n])

}else{

break

}

}

fmt.Println(buffer.String())

}

funcwriteFile() {

file,err := os.Open("e://hello.txt")

iferr != nil {

panic(err)

}

deferfile.Close()

file.WriteString("nihao")

}

你可能感兴趣的:(Go语言学习四:I/O)