我正在尝试为将文件[]字节上传到云端并从云端下载文件[]字节的程序实现读写方法。
到目前为止,我的读取方法停留在一个无限的读取循环中,只读取相同的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
}
编辑:我能够让它工作,答案应该如下。答案 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实现,但这是不必要的。