Reader接口和golang中的Read方法

时间:2014-08-27 12:07:36

标签: io go byte

我正在跟随golang之旅,我被要求:

  

实现一个实现io.Reader的rot13Reader并从io.Reader读取,通过将ROT13替换密码应用于所有字母字符来修改流。

我首先将方法实现到* rot13Reader

   type rot13Reader struct {
    r io.Reader
}

func (r *rot13Reader) Read(p []byte) (n int, e error){


}

然而,我无法理解这种Read方法。

p是否包含读取的所有字节?因此,我应该做的就是迭代它们并应用ROT13替换?

我知道它应该返回读取的字节数和文件末尾的EOF错误但是我不确定何时以及如何调用此方法。回到我原来的问题,p是否包含所有读取的数据?如果没有,那么我该怎么做呢?

1 个答案:

答案 0 :(得分:7)

您应该扫描并且“rot13”仅n字节(io.Readerrot13Reader读取的字节)。

func (r *rot13Reader) Read(p []byte) (n int, e error){
    n, e = r.r.Read(p)
    for i:=range(p[:n]) {
       p[i]=rot13(p[i])
    }
    return
}

rot13Reader封装任何读者并在所述封装的Reader上调用Read 它返回rot13'ed内容和读取的字节数。