我跟随golang之旅,我被要求:
实现一个实现io.Reader的rot13Reader并从io.Reader读取,通过将ROT13替换密码应用于所有字母字符来修改流.
我首先将方法实现到*rot13Reader
type rot13Reader struct {
r io.Reader
}
func (r *rot13Reader) Read(p []byte) (n int, e error){
}
Run Code Online (Sandbox Code Playgroud)
但是我无法理解这种Read方法.
是否p包含所有字节?因此,我应该做的就是迭代它们并应用ROT13替换?
我知道它应该返回读取的字节数和文件末尾的EOF错误但是我不确定何时以及如何调用此方法.所以回到我原来的问题是否p包含所有读取的数据?如果没有,那么我该怎么做呢?
你应该只扫描和"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
}
Run Code Online (Sandbox Code Playgroud)
该rot13Reader封装任何读者,并呼吁Read在所述封装的读者.
它返回rot13'ed内容和读取的字节数.