ファイル[]バイトをクラウドにアップロードし、クラウドからファイル[]バイトをダウンロードするプログラムの読み込みと書き込みメソッドを実装しようとしています。すでにバイトスライスを持っている場合のGolang Readerインタフェースの実装
これまでの私の読み取り方法は、同じ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
}
編集:私はそれが仕事を得ることができたと答えは以下の従ってください。
あなたのプログラムの残りの部分はわかりませんが、おそらく最初の32Kを何度も読んでファイルをダウンロードしているようです。私はあなたが何をしようとしているのかよく分かりませんが、バッファされたファイルのバイトがすでにある場合、なぜReadメソッドが必要ですか? – JimB
Zipアーカイブを作成するには、io.Copyを使用する必要があります。このメソッドは、ReaderとWriterを使用します。 Zip.NewWriterはライターを雇う。 Golangのやり方とすべてがうまくいけば、いいだろう。とにかく、私は仕事に近づいています。 – Godfrey
'[] byte'から' io.Reader'が必要な場合は 'bytes.Reader'のためのもので、' io.Writer'で '[byte] 'を取得する必要がある場合は、 'bytes.Buffer'です。ファイルはある時点で 'io.Reader'から来ているに違いないので、おそらくそれを直接使うことができます。あなたがここにいるのは、より多くのレイヤーを追加することです。単純なソリューションでなければならないものからさらに遠ざかります。 – JimB