一、题目要求
编写MyOD.java 用java MyOD XXX实现Linux下od -tx -tc XXX的功能
二、题目理解
- Linux下od -tx -tc XXX1的功能:在命令行输入
man od
进行查看
-
英文看不懂的话,这里有中文版
-
手动在Linux里面对其进行了验证
- 通过上面准备过程得知Linux下od -tx -tc XXX1的功能为:在以十六进制输出文件内容(默认为四个字节一组)的同时输出字节对应的ASCII值。
三、需求分析
- 支持在命令行中输入一个字符串:该字符串代表要进行转化的文件名
- 每行开头为当前读取到的字符数的7位八进制表示
- 每行读取16个字符,每个字符转化为两位的十六进制数,每四个字符作为一组输出。每输出一行文件内容的十六进制表示,下一行紧接着输出对应的ASCII字符。
- 全部文本内容输出结束后,输出“ ”的十六进制表示以及对应的ASCII字符
- 最后输出当前字符总数
四、设计思路
- 问题1:如何实现在命令行中输入参数?
教材182页Example8_14.java中略微提到一点点。
- 解决方法:arges[]数组的使用
- 问题2:如何将每个字符转化为两位的十六进制数?
- 调用Integer类的public static String toHexString(int i)方法。
- 问题3:如何判断已经读取结束了?
- 解决方法:使用随机流中的length方法返回文件长度,当读取长度与文件长度相等时即为读取结束。
五、代码链接
六、代码实现过程中遇到的问题
- 问题1:输出的十六进制数顺序与实际的相反
- 解决方法:将
s1 =s1+java.lang.Integer.toHexString((int) ch[i])
改为s1 = java.lang.Integer.toHexString((int) ch[i])+s1
,因为该功能的实现实际是将先读入的当做低位的十六进制输出。 - 问题2:我程序输出的当前字符总数为107,而实际为110。
- 解决方法:实际上它是把后来输入的“ ”也算进去了。所以我只要在headnumber后面加1就行了。
七、运行结果截图
八、参考资料
- 《Java2实用教程(第五版)》
- arges[]数组的使用
- JDKTM 6 Documentation