我正在跟随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
是否包含所有读取的数据?如果没有,那么我该怎么做呢?
答案 0 :(得分:7)
您应该扫描并且“rot13”仅n
字节(io.Reader
内rot13Reader
读取的字节)。
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内容和读取的字节数。