Go指南练习 rot13Reader
2024-10-21 06:08:11
题目:
练习:rot13Reader
有种常见的模式是一个 io.Reader 包装另一个 io.Reader,然后通过某种方式修改其数据流。
例如,gzip.NewReader 函数接受一个 io.Reader(已压缩的数据流)并返回一个同样实现了 io.Reader 的 *gzip.Reader(解压后的数据流)。
编写一个实现了 io.Reader 并从另一个 io.Reader 中读取数据的 rot13Reader,通过应用 rot13 代换密码对数据流进行修改。
rot13Reader 类型已经提供。实现 Read 方法以满足 io.Reader。
package main
import (
// "errors"
"io"
"os"
"strings"
)
type rot13Reader struct {
r io.Reader
}
func (r13 rot13Reader) Read(b []byte) (int, error) {
// temp_b := []byte{} 这里新造一个字节切片接受,会导致程序卡住
r, err := r13.r.Read(b)
for i, v := range b {
switch {
case 65 <= v && v <= 90:
new_v := v + 13
if new_v <= 90 {
b[i] = new_v
} else {
new_v = new_v - 26
b[i] = new_v
}
case 97 <= v && v <= 122:
new_v := v + 13
if new_v <= 122 {
b[i] = new_v
} else {
new_v = new_v - 26
b[i] = new_v
}
// 这里抛出异常也会卡住执行很久
// default:
// return 0, errors.New("not alphabet")
}
}
return r, err
}
func main() {
s := strings.NewReader("Lbh penpxrq gur pbqr!")
r := rot13Reader{s}
io.Copy(os.Stdout, &r)
}
最新文章
- Coding Kata - 挑战你的“底线”
- ASP.NET MVC学习之Ajax(完结)
- Apache开启Proxy代理,实现域名端口转发
- ActiveMQ(5.10.0) - Connection Configuration URI
- 将vs2012的项目转化成VS2010
- UIResponder学习
- mui开发app之js将base64转图片文件
- 反射结合xml简单的模拟spring创建bean
- linux 开机批量启动程序
- SpringBoot更改HttpMessageConverters使用FastJson出现乱码问题
- PTA第四次作业
- ios用户登录记住密码
- zookeeper学习:知识点收集
- sql可重复执行语句例子
- day07作业
- varnish squid nginx比较
- C#使用Docx操作word文档
- C++中精确到小数点后任意位
- Vue 生产环境部署
- Linux系统服务管理 系统服务
热门文章
- CodeCraft-19 and Codeforces Round #537 (Div. 2) D 多重排列 + 反向01背包 + 离线处理
- MySQL处理表字段小技巧
- xtrabackup安装使用及原理
- 事件同步(一)-——CreateEvent( )事件对象实现线程同步
- MIT molecular Biology 笔记10 翻译
- .net MongoDB使用
- mysql_触发器
- Max Sum—hdu1003(简单DP) 标签: dp 2016-05-05 20:51 92人阅读 评论(0)
- Uncaught TypeError: Illegal invocation
- yum-163源配置