4.1 读取数据到固定长度的缓存中

package part2

import (
	"io"
	"math/rand"
	"net"
	"testing"
)

func TestReadIntoBuff(t *testing.T) {
	payload := make([]byte, 1<<24) // 16MB data
	_, err := rand.Read(payload)
	if err != nil {
		t.Fatal(err)
	}

	listener, err := net.Listen("tcp", "127.0.0.1:")
	if err != nil {
		t.Fatal(err)
	}

	go func() {
		conn, err := listener.Accept()
		if err != nil {
			t.Log(err)
			return
		}
		defer conn.Close()

		_, err = conn.Write(payload)
		if err != nil {
			t.Error(err)
		}
	}()

	conn, err := net.Dial("tcp", listener.Addr().String())
	if err != nil {
		t.Fatal(err)
	}
	defer conn.Close()

	buf := make([]byte, 1<<19) // 512KB read buf
	for {
		n, err := conn.Read(buf)
		if err != nil {
			if err != io.EOF {
				t.Error(err)
			}
			break
		}
		t.Logf("read %d bytes", n) // buf[:n] is the data read from conn
	}
}

输出结果:

$ go test -v
=== RUN   TestReadIntoBuff
    4-read-data_test.go:51: read 65536 bytes
    4-read-data_test.go:51: read 65536 bytes
    ......
    4-read-data_test.go:51: read 65483 bytes
    4-read-data_test.go:51: read 45064 bytes
--- PASS: TestReadIntoBuff (0.07s)
PASS
ok      bekars.github.com/gonetwork/v2/part2    0.075s

最后更新于