-
Notifications
You must be signed in to change notification settings - Fork 13
/
bytes_Reader_01.go
68 lines (60 loc) · 2.79 KB
/
bytes_Reader_01.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
package main
import (
"bytes"
"fmt"
)
func main() {
byte_slice:=[]byte{99,98,99,99,101,102,103,107}
//byte_slice:=[]byte{00,24,00,35,00,56,00,34}
//byte_slice:=[]byte{99,98,99,99,100,100,100,107}
ls:=make([]byte,6)
reader := bytes.NewReader(byte_slice)
fmt.Println(reader)
fmt.Println(reader.Read(ls))
fmt.Println(reader)
fmt.Println(ls)
ls111:=make([]byte,6)
fmt.Println(reader.ReadAt(ls111,2))
fmt.Println(ls111)
//ReadRune读取并返回Reader中的下一个utf-8码值。如果没有数据可用,
// 返回值err为io.EOF。如果缓冲中的数据是错误的utf-8编码,本方法会吃掉一字节并返回(U+FFFD, 1, nil)。
ch, size, _ := reader.ReadRune()//ch是读取结束时候的指针值,size是单前的字节宽度,这表明里面没有任何一个rune类型的字节
//如果读取成功的话各个参数的意义就不一样了
fmt.Println("----",ch)
fmt.Printf("%T\n",ch)
fmt.Println(size)
fmt.Printf("%T---%v\n",byte_slice[0],byte_slice[0])
fmt.Println("--------------------")
// Size返回基础字节片的原始长度。
// Size是可通过ReadAt读取的字节数。
//返回的值始终相同,并且不受任何其他方法的调用影响。
fmt.Println(reader.Size())
fmt.Println(reader.Len())//Len返回r包含的切片中还没有被读取的部分。
fmt.Println("--------------------")
//fmt.Println(reader)
//fmt.Println(reader.Seek(4,0))//read的指针移动到索引4再读
//ls222:=make([]byte,3)
//fmt.Println(reader)
//fmt.Println(reader.Read(ls222))
////因为上面的读取,导致这里开始读取的索引为左后一个了,所以直接读取最后一个单个字节,注意他只读取单个字节
//fmt.Println(reader.ReadByte())
//ls333:=[]byte{1,2,3,4,5}
//ls333:=[]byte{}
//fmt.Printf("%p---%v\n",reader,reader)//0xc00005a330---&{[99 98 99 99 100 100 100 107] 8 -1}
//reader.Reset(ls333)//0xc00005a330---&{[] 0 -1}
////reader.Reset(ls333)
////地址没变,相当于原来切片的切片
//fmt.Printf("%p---%v\n",reader,reader)//0xc00005a330---&{[1 2 3 4 5] 0 -1}
fmt.Println(reader.UnreadByte())
fmt.Println(reader)
fmt.Println("--------------------")
fmt.Println(reader.ReadRune())//也受读取指针的影响,如果指针在最后了,那就返回最后一个索引值
fmt.Println(reader.UnreadRune())//似乎是ReadRune()的反向。调用这个之前必须要调用ReadRune()才可以
//UnreadRune吐出最近一次调用ReadRune方法读取的unicode码值。
// 如果最近一次读写操作不是ReadRune,本方法会返回错误。
// (这里就能看出来UnreadRune比UnreadByte严格多了)
fmt.Println("--------------------")
fmt.Println(reader)//&{[99 98 99 99 101 102 103 107] 6 -1}
fmt.Println(reader.UnreadByte())//读取指针发生变化
fmt.Println(reader)//&{[99 98 99 99 101 102 103 107] 5 -1}
}