6
6
"io"
7
7
"math"
8
8
"net"
9
- "runtime"
10
9
"strconv"
11
10
"unsafe"
12
11
@@ -20,28 +19,19 @@ type Builder struct {
20
19
key ftea.TEA
21
20
usetea bool
22
21
hasput bool
23
- hasset bool
24
22
io.Writer
25
23
io.ReaderFrom
26
24
}
27
25
28
26
// NewWriterF from https://github.com/Mrs4s/MiraiGo/blob/master/binary/writer.go
29
27
func NewWriterF (f func (writer * Builder )) []byte {
30
- w := SelectBuilder ( nil )
28
+ w := NewBuilder ( )
31
29
f (w )
32
30
b := make ([]byte , w .Len ())
33
31
copy (b , w .ToBytes ())
34
- w .put ()
35
32
return b
36
33
}
37
34
38
- // OpenWriterF must call func cl to close from https://github.com/Mrs4s/MiraiGo/blob/master/binary/writer.go
39
- func OpenWriterF (f func (builder * Builder )) (b []byte , cl func ()) {
40
- w := SelectBuilder (nil )
41
- f (w )
42
- return w .ToBytes (), w .put
43
- }
44
-
45
35
// ToBytes from https://github.com/Mrs4s/MiraiGo/blob/master/binary/writer.go
46
36
func ToBytes (i any ) []byte {
47
37
return NewWriterF (func (w * Builder ) {
@@ -55,31 +45,13 @@ func ToBytes(i any) []byte {
55
45
})
56
46
}
57
47
58
- // NewBuilder with finalizer of itself.
59
- //
60
- // Be sure to use all data before builder is GCed.
61
- func NewBuilder (key []byte ) * Builder {
62
- b := SelectBuilder (key )
63
- if ! b .hasset {
64
- b .hasset = true
65
- runtime .SetFinalizer (b , func (b any ) {
66
- b .(* Builder ).put ()
67
- })
68
- }
69
- return b
70
- }
71
-
72
48
func (b * Builder ) init (key []byte ) * Builder {
73
49
b .key = ftea .NewTeaCipher (key )
74
50
b .usetea = len (key ) == 16
75
51
b .hasput = false
76
52
return b
77
53
}
78
54
79
- func (b * Builder ) put () {
80
- PutBuilder (b )
81
- }
82
-
83
55
func (b * Builder ) Len () int {
84
56
return b .buffer .Len ()
85
57
}
@@ -99,7 +71,6 @@ func (b *Builder) Buffer() *bytes.Buffer {
99
71
// GC 安全, 返回的数据在 Builder 被销毁之后仍能被正确读取,
100
72
// 但是只能调用一次, 调用后 Builder 即失效
101
73
func (b * Builder ) ToBytes () []byte {
102
- defer b .put ()
103
74
if b .usetea {
104
75
return b .key .Encrypt (b .buffer .Bytes ())
105
76
}
@@ -113,8 +84,6 @@ func (b *Builder) ToBytes() []byte {
113
84
// GC 安全, 返回的数据在 Builder 被销毁之后仍能被正确读取,
114
85
// 但是只能调用一次, 调用后 Builder 即失效
115
86
func (b * Builder ) Pack (typ uint16 ) []byte {
116
- defer b .put ()
117
-
118
87
buf := make ([]byte , b .Len ()+ 2 + 2 + 16 )
119
88
120
89
n := 0
0 commit comments