当你已经有片段缓冲区时,Golang Reader接口实现

时间:2017-03-02 00:37:19

标签: go io

我正在尝试为将文件[]字节上传到云端并从云端下载文件[]字节的程序实现读写方法。

到目前为止,我的读取方法停留在一个无限的读取循环中,只读取相同的32KiB。

我使用我打开的文件作为输入以满足io.Copy

我确信我的实施方式有些混乱

func (s S3File) Read(buffer []byte) (int, error){
if s.mode != "rb"{
    fmt.Println("Wrong mode used")
}
buf, err := s.DownBufferInfo(s.path)
if err != nil{
    fmt.Println("Error from getting buffer for reader. at `rb` ")
}
allbytes := buf.Bytes()  //BYTES READ FROM A FILE IN THE CLOUD
fmt.Printf("len of bytes from reader --%v", len(allbytes))
/////////////////////////////////////////////////////////
//result := copy(buffer, allbytes)
//n := append(buffer, allbytes...)
////////////////////////////////////////////////////////
fileBytes := bytes.NewBuffer(allbytes)
result, err := fileBytes.Read(buffer)
////////////////////////////////////////////////////////
//fileBytes := bytes.NewReader(allbytes)
//result, err := fileBytes.Read(buffer)
fmt.Printf("len of bytes read to buffer --%v", result)
fmt.Printf("Total buffer len after read --%v", len(buffer))

return result, err

}

编辑:我能够让它工作,答案应该如下。

1 个答案:

答案 0 :(得分:0)

虽然我的主要动机是能够方便地在我的代码中使用io.Copy,但我后来意识到我现在的阅读器无论如何都无需工作。

函数func Copy(dst Writer, src Reader) (written int64, err error)使用源Reader和目标Writer。

我的通用读者已经为我提供了一片[]byte。我需要的只是一个写入这些字节的Writer。

方便的是,dst Writer实现了Writer接口,如下所示:

type Writer interface {
    Write(p []byte) (n int, err error)

}

我做的只是做:

dst.Write(my_slice_byte)

或者我重写了我的Read实现,但这是不必要的。