20170531动手实践MyOD——20155312
2017-05-31 16:52
393 查看
实践题目
编写MyOD.java 用java MyOD XXX实现Linux下od -tx -tc XXX的功能对题目分析如下
od的功能(参考Linux od命令详细介绍及用法实例):od命令用于将指定文件内容以八进制、十进制、十六进制、浮点格式或ASCII编码字符方式显示,通常用于显示或查看文件中不能直接显示在终端的字符。
选项
-t:指定输出格式,格式包括a、c、d、f、o、u和x。
参数
x[SIZE]:十六进制,SIZE字节为单位以十六进制输出。
od -tx XXX是以十六进制输出XXX的内容,默认以四字节为一组显示。(XXX中字符对应的ascii值的十六进制表示,且每四字节显示的顺序是字符从后向前的顺序)截图如下:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201705/48aced9a1f33cfc22801cf48e5af7c96.png)
od -tx1 XXX以十六进制输出,每列输出一字节。这样可视性较好,因此更加常用。通过与不指定[SIZE]的od -tx XXX对比,可以发现,od -tx1 XXX输出的十六进制数的顺序与文件中字符顺序一致。截图如下:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201705/13e40e5cec0038b998dc88b63b251a3c.png)
参数
c:ASCII字符或者反斜杠。
od -tx -tc XXX就是在十六进制输出其ascii值的同时,显示对应的文件内容,-tx和-tc的前后顺序决定了文本内容和十六进制ascii值的上下顺序。截图如下:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201705/2cd70a3abb3941abd0d348d9a7e02307.png)
od -tc -tx1 XXX是每列输出一个字节,打印文件内容和对应的十六进制ascii值(我编写的MyOD实现的即是这个功能)。截图如下:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201705/a09be14e5d4bba90ce1b3793db5198b3.png)
实践过程中出现的问题及解决过程
问题一:用new FileInputStream("...")指定文件名时,最初我写的字符串是"~/zjy20155312/exam20170531/abc",编译没有问题,但运行时显示找不到文件。解决:向老师求助,老师用
pwd命令找到了所在文件夹的全路径名"/home/zjy/zjy20155312/exam20170531",将文件名替换为"/home/zjy/zjy20155312/exam20170531/abc",解决了这个问题。
问题二:0d命令显示的第一列七个数字是什么含义,怎么编程实现?
解决:通过查资料,左侧第一列为默认的地址,格式为七位八进制。通过找规律,我发现其数值是该行第一个字符的序号值(从0到length-1)对应的的八进制数,最开始我准备编写一个十进制转八进制的函数来显示这七位数字,后来突然想到可以用八进制输出格式来简化这个问题,即
"%07o"不足7位的地方补零。
注:地址值隔一行显示一次,所以将其放在了每行显示16个字符并输出一个换行符之后。
问题三:用fileinputstream.read()来取得文本中的字符并显示其内容为什么不行?
解决:通过查询API,当read()括号中不指定存放读入的内容的数组名时,功能是从此输入流中读取一个数据字节。运行时会发现,其读取的数据是不完整的,例如若文件中的内容是1234567890abcdefghijkl,这样读取只能显示24680bd....所以我先定义了一个存放读入内容的数组
byte[] data = new byte[1024];然后用指定数组名的方式调用read方法,
length = file.read(data);,将读入的字节数赋值给length。这样显示文件内容时,只需要显示data中元素的内容即可。
问题四:od显示的文本最后一个字符是'\n',但我编写的MyOD会直接将这个回车输出成换行,无法显示\n。
解决:因为MyOD已经实现了od -tx1 -tc XXX的功能,所以我没有去修改代码让其显示换行这个字符。如果一定要解决这个问题的话,可以不按字符%c打印最后一个元素,而是直接用“\n”这样输出字符串的方式,但这样做其实意义不大。
代码与运行截图
代码截图如下:![](https://oscdn.geek-share.com/Uploads/Images/Content/201705/b51550a71af28c0d1f427f3a88222812.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201705/6001dd35c23639c8bea39fa3242dc761.png)
运行截图如下:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201705/b11c7923866db355860d2a140f09a809.png)
码云链接
相关文章推荐
- 20170531 课堂实践 MyOD
- selenium+Python+firefox动手实践一
- 验证码识别实践3:自己动手C#实现,颜色差异法去除干扰线
- 20155233刘高乐 第二周课堂实践以及MyOD
- 动手实践-环境搭建
- 【物联网(IoT)开发】物联网及NodeRed 技术讲解及动手实践活动分享
- 动手实践:在Windows上安装NumPy、Matplotlib、SciPy和IPython
- Python编程:从入门到实践的动手试一试答案(第八章)
- 看书做题动手!【再简单也要实践】
- Python编程:从入门到实践的动手试一试(第五章)
- 动手实践 Linux VLAN - 每天5分钟玩转 OpenStack(13)
- 动手实践:在Windows上安装NumPy
- 王家林的81门一站式云计算分布式大数据&移动互联网解决方案课程第二门课程:云计算分布式大数据Hadoop数据库管理员企业级动手实践
- 【原创 Hadoop&Spark 动手实践 7】Spark 计算引擎剖析与动手实践
- 动手实践:运行yolo-tensorflow
- 20155323课堂实践20170531
- 【眼见为实】自己动手实践理解数据库READ UNCOMMITED && SERIALIZABLE
- 编程是一门实践技能,积极动手实验常有意外的收获
- 【转载 Hadoop&Spark 动手实践 2】Hadoop2.7.3 HDFS理论与动手实践
- 王家林的81门一站式云计算分布式大数据&移动互联网解决方案课程第二门课程:云计算分布式大数据Hadoop数据库管理员企业级动手实践