Skip to content

Commit 0a710de

Browse files
committed
添加ByteString类
1 parent 8aa1097 commit 0a710de

File tree

2 files changed

+283
-0
lines changed

2 files changed

+283
-0
lines changed

ByteString.go

Lines changed: 275 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,275 @@
1+
package utils
2+
3+
import (
4+
"bytes"
5+
"encoding/binary"
6+
"errors"
7+
"io"
8+
)
9+
10+
type ByteString struct {
11+
buff *bytes.Buffer
12+
}
13+
14+
func NewByteString() *ByteString {
15+
bs := new(ByteString)
16+
bs.buff = bytes.NewBuffer(make([]byte, 0))
17+
18+
return bs
19+
}
20+
21+
func (this *ByteString) ClearBuff() {
22+
this.buff.Reset()
23+
}
24+
25+
/**
26+
将字节流追加到当前处理之后
27+
*/
28+
func (this *ByteString) SetBuff(buff []byte) {
29+
this.buff.Write(buff)
30+
}
31+
32+
func (this *ByteString) ReadFromReader(reader io.Reader) (int64, error) {
33+
return this.buff.ReadFrom(reader)
34+
}
35+
36+
/*
37+
获取剩余未读的字节流
38+
*/
39+
func (this *ByteString) GetBuff() []byte {
40+
return this.buff.Bytes()
41+
}
42+
43+
func (this *ByteString) WriteToWriter(w io.Writer) (int64, error) {
44+
return this.buff.WriteTo(w)
45+
}
46+
47+
func (this *ByteString) Read(args ...interface{}) error {
48+
var err error
49+
for _, a := range args {
50+
switch v := a.(type) {
51+
case *int:
52+
var i int32
53+
i, err = this.ReadInt32()
54+
if err == nil {
55+
*v = int(i)
56+
}
57+
case *uint:
58+
var i int32
59+
i, err = this.ReadInt32()
60+
if err == nil {
61+
*v = uint(i)
62+
}
63+
case *int64:
64+
*v, err = this.ReadInt64()
65+
case *int32:
66+
*v, err = this.ReadInt32()
67+
case *int16:
68+
*v, err = this.ReadInt16()
69+
case *int8:
70+
*v, err = this.ReadInt8()
71+
case *uint64:
72+
*v, err = this.ReadUInt64()
73+
case *uint32:
74+
*v, err = this.ReadUInt32()
75+
case *uint16:
76+
*v, err = this.ReadUInt16()
77+
case *uint8:
78+
*v, err = this.ReadUInt8()
79+
80+
case *string:
81+
*v, err = this.ReadVarString()
82+
case []byte:
83+
v, err = this.ReadBytes(len(v))
84+
default:
85+
err = errors.New("Not Support Data Type")
86+
}
87+
if err != nil {
88+
return err
89+
}
90+
}
91+
92+
return nil
93+
94+
}
95+
96+
func (this *ByteString) Write(args ...interface{}) error {
97+
var err error
98+
for _, a := range args {
99+
switch v := a.(type) {
100+
case int64:
101+
err = this.WriteInt64(v)
102+
case int32:
103+
err = this.WriteInt32(v)
104+
case int:
105+
var i int = v
106+
err = this.WriteInt32(int32(i))
107+
case int16:
108+
err = this.WriteInt16(v)
109+
case int8:
110+
err = this.WriteInt8(v)
111+
case uint64:
112+
err = this.WriteUInt64(v)
113+
case uint32:
114+
err = this.WriteUInt32(v)
115+
case uint:
116+
var i uint = v
117+
err = this.WriteUInt32(uint32(i))
118+
case uint16:
119+
err = this.WriteUInt16(v)
120+
case uint8:
121+
err = this.WriteUInt8(v)
122+
case string:
123+
err = this.WriteVarString(v)
124+
case []byte:
125+
err = this.WriteBytes(v, len(v))
126+
default:
127+
err = errors.New("Not Support Data Type")
128+
}
129+
if err != nil {
130+
return err
131+
}
132+
}
133+
134+
return nil
135+
136+
}
137+
138+
///读的方法完成
139+
140+
func (this *ByteString) ReadInt8() (int8, error) {
141+
var n int8
142+
if err := binary.Read(this.buff, binary.BigEndian, &n); err != nil {
143+
return 0, err
144+
}
145+
return n, nil
146+
}
147+
148+
func (this *ByteString) ReadUInt8() (uint8, error) {
149+
var n uint8
150+
if err := binary.Read(this.buff, binary.BigEndian, &n); err != nil {
151+
return 0, err
152+
}
153+
return n, nil
154+
}
155+
156+
func (this *ByteString) ReadInt16() (int16, error) {
157+
var n int16
158+
if err := binary.Read(this.buff, binary.BigEndian, &n); err != nil {
159+
return 0, err
160+
}
161+
return n, nil
162+
}
163+
164+
func (this *ByteString) ReadUInt16() (uint16, error) {
165+
166+
var n uint16
167+
if err := binary.Read(this.buff, binary.BigEndian, &n); err != nil {
168+
return 0, err
169+
}
170+
return n, nil
171+
}
172+
173+
func (this *ByteString) ReadInt32() (int32, error) {
174+
175+
var n int32
176+
if err := binary.Read(this.buff, binary.BigEndian, &n); err != nil {
177+
return 0, err
178+
}
179+
return n, nil
180+
}
181+
182+
func (this *ByteString) ReadUInt32() (uint32, error) {
183+
var n uint32
184+
if err := binary.Read(this.buff, binary.BigEndian, &n); err != nil {
185+
return 0, err
186+
}
187+
return n, nil
188+
}
189+
func (this *ByteString) ReadInt64() (int64, error) {
190+
var n int64
191+
if err := binary.Read(this.buff, binary.BigEndian, &n); err != nil {
192+
return 0, err
193+
}
194+
return n, nil
195+
}
196+
197+
func (this *ByteString) ReadUInt64() (uint64, error) {
198+
var n uint64
199+
if err := binary.Read(this.buff, binary.BigEndian, &n); err != nil {
200+
return 0, err
201+
}
202+
return n, nil
203+
}
204+
205+
func (this *ByteString) ReadString(size int) (string, error) {
206+
bs, err := this.ReadBytes(size)
207+
return string(bs), err
208+
}
209+
210+
func (this *ByteString) ReadBytes(size int) ([]byte, error) {
211+
bs := make([]byte, size)
212+
if _, err := this.buff.Read(bs); err != nil {
213+
return bs, err
214+
} else {
215+
return bs, nil
216+
}
217+
}
218+
219+
func (this *ByteString) ReadVarString() (string, error) {
220+
size, err := this.ReadUInt16()
221+
if err != nil {
222+
return "", err
223+
}
224+
return this.ReadString(int(size))
225+
}
226+
227+
///写处理
228+
func (this *ByteString) WriteInt8(n int8) error {
229+
return binary.Write(this.buff, binary.BigEndian, n)
230+
}
231+
232+
func (this *ByteString) WriteUInt8(n uint8) error {
233+
return binary.Write(this.buff, binary.BigEndian, n)
234+
}
235+
236+
func (this *ByteString) WriteInt16(n int16) error {
237+
return binary.Write(this.buff, binary.BigEndian, n)
238+
}
239+
240+
func (this *ByteString) WriteUInt16(n uint16) error {
241+
return binary.Write(this.buff, binary.BigEndian, n)
242+
}
243+
244+
func (this *ByteString) WriteInt32(n int32) error {
245+
return binary.Write(this.buff, binary.BigEndian, n)
246+
}
247+
248+
func (this *ByteString) WriteUInt32(n uint32) error {
249+
return binary.Write(this.buff, binary.BigEndian, n)
250+
}
251+
252+
func (this *ByteString) WriteInt64(n int64) error {
253+
return binary.Write(this.buff, binary.BigEndian, n)
254+
}
255+
256+
func (this *ByteString) WriteUInt64(n uint64) error {
257+
return binary.Write(this.buff, binary.BigEndian, n)
258+
}
259+
260+
func (this *ByteString) WriteString(str string) error {
261+
return binary.Write(this.buff, binary.BigEndian, str)
262+
}
263+
264+
func (this *ByteString) WriteVarString(str string) error {
265+
size := len(str)
266+
if err := this.WriteUInt16(uint16(size)); err != nil {
267+
return err
268+
}
269+
return this.WriteString(str)
270+
}
271+
272+
func (this *ByteString) WriteBytes(bs []byte, size int) error {
273+
_bs := bs[:size]
274+
return binary.Write(this.buff, binary.BigEndian, _bs)
275+
}

README.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,14 @@ Db : 封装SQL,便于处理事务
1111

1212
Json : 封装JSON,便于处理JSON
1313

14+
File : 封装简单的文件写入
15+
16+
Encoding : 封装一些简单的编码处理
17+
18+
Time : 封装时间处理,格式化处理更像PHP方式
19+
20+
ByteString : 封装处理二进制流读写操作
21+
1422
install
1523
-------
1624

0 commit comments

Comments
 (0)