读取接口参数(p []字节)读取后将字节长度变为 512

下面是示例代码:人员的定义


type Person struct {

   Data string

   done bool

}

实现写入


func (person *Person) Write(p []byte) (int,error) {

    person.Data = string(p)

    return len(p), nil

}


实现读取


func (person *Person) Read(p []byte) (int,error) {

    if person.done {

        return 0, io.EOF

    }


    for index, b := range []byte(person.Data) {

        p[index] = b

    }

    // len(p) = 512 <- length p []byte

    person.done = true

    return len(person.Data), nil

}

写入一些数据


func writeTo(out io.Writer) error {

    if _, err := out.Write([]byte("test")); err != nil {

        return err

    }

    fmt.Println("Write done")

    return nil

}

主要


func main() {

    p := &Person{}

    

    writeTo(p)


    s, err := ioutil.ReadAll(p)

    if err != nil {

        panic(err)

    }

    

    fmt.Println("result:",string(s),len(s))

}

如所注意到的,p []字节长度为512。我想知道为什么它变成512长度。


翻阅古今
浏览 78回答 1
1回答

繁花如伊

您的代码调用 :ReadAlls, err := ioutil.ReadAll(p)ReadAll基本上像这样工作:package mainimport "fmt"func main() {&nbsp; &nbsp;// first, make an empty slice, with a reserve space of 512&nbsp; &nbsp;b := make([]byte, 0, 512)&nbsp; &nbsp;// then, write data into the reserve space&nbsp; &nbsp;n := copy(b[:cap(b)], "north")&nbsp; &nbsp;// then, increase the slice to how much data was just written&nbsp; &nbsp;b = b[:n]&nbsp; &nbsp;// 5 [110 111 114 116 104]&nbsp; &nbsp;fmt.Println(n, b)}https://github.com/golang/go/blob/go1.16.3/src/io/io.go#L626
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Go