Go指南练习_rot13Reader

https://tour.go-zh.org/methods/23

一、题目描述

有种常见的模式是一个 io.Reader 包装另一个 io.Reader,然后通过某种方式修改其数据流。

例如,gzip.NewReader 函数接受一个 io.Reader(已压缩的数据流)并返回一个同样实现了 io.Reader 的 *gzip.Reader(解压后的数据流)。

编写一个实现了 io.Reader 并从另一个 io.Reader 中读取数据的 rot13Reader,通过应用 rot13 代换密码对数据流进行修改。

rot13Reader 类型已经提供。实现 Read 方法以满足 io.Reader

二、题目分析

根据维基百科解释,ROT13是一个简单的字母替换密码,用字母后面的第13个字母替换当前字母。

搞清楚原理后,我们可以尝试开始编写字母转换程序。

三、Go代码

package main

import (
    "io"
    "os"
    "strings"
)

type rot13Reader struct {  
    r io.Reader
}

func rot13(out byte) byte{  //字母转换
    switch{
        case out >= 'A' && out <= 'M' || out >= 'a' && out <= 'm':
            out += 13
        case out >= 'N' && out <= 'Z' || out >= 'n' && out <= 'z':
            out -= 13
    }        
    return out
}    
    
func (fz rot13Reader) Read(b []byte) (int,error){  //重写Read方法
    n, e := fz.r.Read(b)
           for i := 0; i < n; i++ {
        b[i] = rot13(b[i])    
        }            
    return n,e
}    

四、参考资料

rot13.go

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Hongten

JSP 四讲

25130
来自专栏余林丰

Java IO(2)阻塞式输入输出(BIO)

  在上文中《Java IO(1)基础知识——字节与字符》了解到了什么是字节和字符,主要是为了对Java IO中有关字节流和字符流有一个更好的了解。   本文所...

31050
来自专栏Android知识点总结

2-SII--应用本包下文件写入和读取

10140
来自专栏noteless

[二十二]JavaIO之LineNumberReader

LineNumberReader本身并没有太多的东西,他是BufferedReader的子类

12420
来自专栏公众号_薛勤的博客

用Java执行Python:Jython踩坑笔记

1.通过Jython.jar提供的类库实现 2.通过Runtime.getRuntime()开启进程来执行脚本文件

1.3K40
来自专栏蜉蝣禅修之道

java解析xml技术(二)

13820
来自专栏noteless

java 标准输出与标准错误 out与 err 区别 用法 联系 java中的out与err区别 System.out和System.err的区别 System.out.println和Sy

java 标准输出与标准错误    out与 err 区别 用法 联系  java中的out与err区别  System.out和System.err的区别 S...

24130
来自专栏向治洪

Kotlin 1.2 新特性

在Kotlin 1.1中,团队正式发布了JavaScript目标,允许开发者将Kotlin代码编译为JS并在浏览器中运行。在Kotlin 1.2中,团队增加了在...

240100
来自专栏Vamei实验室

Java进阶03 IO基础

计算机最重要的功能是处理数据。一个有用的计算机语言需要拥有良好的IO功能,以便让未处理的数据流入程序,让已处理的数据流出。 与其他语言相比,Java的IO功能显...

19450
来自专栏Golang语言社区

厚土Go学习笔记 | 32. Readers读取数据流

go语言的 io 包指定了 io.Reader 接口。go语言标准库包含了这个接口的许多实现,包括文件、网络连接、压缩、加密等等。 io.Reader 接口有一...

39290

扫码关注云+社区

领取腾讯云代金券