105 lines
2.0 KiB
Go
105 lines
2.0 KiB
Go
package code
|
|
|
|
import (
|
|
"bufio"
|
|
"bytes"
|
|
"compress/gzip"
|
|
"crypto/md5"
|
|
"crypto/sha1"
|
|
"io"
|
|
"testing"
|
|
)
|
|
|
|
type WrapReader struct {
|
|
len int
|
|
r io.Reader
|
|
}
|
|
|
|
func (w *WrapReader) Read(p []byte) (int, error) {
|
|
n, err := w.r.Read(p)
|
|
w.len += n
|
|
return n, err
|
|
}
|
|
|
|
func TestReader(t *testing.T) {
|
|
file := bytes.NewBuffer([]byte("hello world"))
|
|
wr := WrapReader{len: 0, r: file}
|
|
_, _ = io.Copy(io.Discard, &wr)
|
|
t.Logf("文件长度: %d\n", wr.len)
|
|
}
|
|
|
|
func TestGzip(t *testing.T) {
|
|
file := bytes.NewBuffer([]byte("hello world"))
|
|
buf := bytes.NewBuffer(nil)
|
|
w := gzip.NewWriter(buf)
|
|
_, _ = io.Copy(w, file)
|
|
t.Logf("不Close文件长度: %d\n", buf.Len())
|
|
w.Close()
|
|
t.Logf("压缩后文件长度: %d\n", buf.Len())
|
|
}
|
|
|
|
func TestIOHash(t *testing.T) {
|
|
file := bytes.NewBuffer([]byte("hello world"))
|
|
md5 := md5.New()
|
|
sha1 := sha1.New()
|
|
r := io.TeeReader(file, io.MultiWriter(md5, sha1))
|
|
_, _ = io.Copy(io.Discard, r)
|
|
t.Logf("md5: %x\n", md5.Sum(nil))
|
|
t.Logf("sha1: %x\n", sha1.Sum(nil))
|
|
}
|
|
|
|
func TestLimitReader(t *testing.T) {
|
|
file := bytes.NewBuffer([]byte("hello world"))
|
|
lr := io.LimitReader(file, 5)
|
|
data, _ := io.ReadAll(lr)
|
|
t.Logf("%s\n", data)
|
|
}
|
|
|
|
func TestBufIo(t *testing.T) {
|
|
// 写入100M文件
|
|
file := bytes.NewBufferString("hello world\ngolang")
|
|
buf := bufio.NewReader(file)
|
|
for {
|
|
line, err := buf.ReadString('\n')
|
|
if err == io.EOF {
|
|
t.Logf("%s", line)
|
|
break
|
|
}
|
|
t.Logf("%s", line)
|
|
}
|
|
}
|
|
|
|
// 凯撒加密
|
|
type decode struct {
|
|
r io.Reader
|
|
}
|
|
|
|
func (d *decode) Read(p []byte) (int, error) {
|
|
// 读取数据
|
|
n, err := d.r.Read(p)
|
|
if err != nil {
|
|
if err != io.EOF {
|
|
return n, err
|
|
}
|
|
}
|
|
// 解密
|
|
for i := 0; i < n; i++ {
|
|
p[i]++
|
|
}
|
|
return n, err
|
|
}
|
|
|
|
func TestDecodePipe(t *testing.T) {
|
|
body := bytes.NewBuffer([]byte("gdkkn\u001Fvnqkc"))
|
|
r, w := io.Pipe()
|
|
defer r.Close()
|
|
go func() {
|
|
defer w.Close()
|
|
// 读取加密数据解密
|
|
_, _ = io.Copy(w, &decode{r: body})
|
|
}()
|
|
// 读取解密数据,保存文件
|
|
data, _ := io.ReadAll(r)
|
|
t.Logf("%s\n", data)
|
|
}
|