实践题目

编写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值的十六进制表示,且每四字节显示的顺序是字符从后向前的顺序)截图如下:

    • od -tx1 XXX以十六进制输出,每列输出一字节。这样可视性较好,因此更加常用。通过与不指定[SIZE]的od -tx XXX对比,可以发现,od -tx1 XXX输出的十六进制数的顺序与文件中字符顺序一致。截图如下:

  • 参数c:ASCII字符或者反斜杠。
    • od -tx -tc XXX就是在十六进制输出其ascii值的同时,显示对应的文件内容,-tx和-tc的前后顺序决定了文本内容和十六进制ascii值的上下顺序。截图如下:

    • od -tc -tx1 XXX是每列输出一个字节,打印文件内容和对应的十六进制ascii值(我编写的MyOD实现的即是这个功能)。截图如下:

实践过程中出现的问题及解决过程

  • 问题一:用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”这样输出字符串的方式,但这样做其实意义不大。

    代码与运行截图

  • 代码截图如下:

  • 运行截图如下:

码云链接

20170531动手实践MyOD——20155312的更多相关文章

  1. 20170531 课堂实践 MyOD

    MyOD 题目 编写MyOD.java 用java MyOD XXX实现Linux下od -tx -tc XXX的功能 Linux下od功能详解 od(octal dump)命令可以以八进制.十进制. ...

  2. 【原创 深度学习与TensorFlow 动手实践系列 - 4】第四课:卷积神经网络 - 高级篇

    [原创 深度学习与TensorFlow 动手实践系列 - 4]第四课:卷积神经网络 - 高级篇 提纲: 1. AlexNet:现代神经网络起源 2. VGG:AlexNet增强版 3. GoogleN ...

  3. 【原创 深度学习与TensorFlow 动手实践系列 - 3】第三课:卷积神经网络 - 基础篇

    [原创 深度学习与TensorFlow 动手实践系列 - 3]第三课:卷积神经网络 - 基础篇 提纲: 1. 链式反向梯度传到 2. 卷积神经网络 - 卷积层 3. 卷积神经网络 - 功能层 4. 实 ...

  4. 【原创 Hadoop&Spark 动手实践 12】Spark MLLib 基础、应用与信用卡欺诈检测系统动手实践

    [原创 Hadoop&Spark 动手实践 12]Spark MLLib 基础.应用与信用卡欺诈检测系统动手实践

  5. 【原创 Hadoop&Spark 动手实践 13】Spark综合案例:简易电影推荐系统

    [原创 Hadoop&Spark 动手实践 13]Spark综合案例:简易电影推荐系统

  6. 【原创 Hadoop&Spark 动手实践 8】Spark 应用经验、调优与动手实践

    [原创 Hadoop&Spark 动手实践 7]Spark 应用经验.调优与动手实践 目标: 1. 了解Spark 应用经验与调优的理论与方法,如果遇到Spark调优的事情,有理论思考框架. ...

  7. 【原创 Hadoop&Spark 动手实践 9】Spark SQL 程序设计基础与动手实践(上)

    [原创 Hadoop&Spark 动手实践 9]SparkSQL程序设计基础与动手实践(上) 目标: 1. 理解Spark SQL最基础的原理 2. 可以使用Spark SQL完成一些简单的数 ...

  8. 【原创 Hadoop&Spark 动手实践 10】Spark SQL 程序设计基础与动手实践(下)

    [原创 Hadoop&Spark 动手实践 10]Spark SQL 程序设计基础与动手实践(下) 目标: 1. 深入理解Spark SQL 程序设计的原理 2. 通过简单的命令来验证Spar ...

  9. 【原创 Hadoop&Spark 动手实践 11】Spark Streaming 应用与动手实践

    [原创 Hadoop&Spark 动手实践 11]Spark Streaming 应用与动手实践 目标: 1. 掌握Spark Streaming的基本原理 2. 完成Spark Stream ...

随机推荐

  1. 截图软件FastStone

    屏幕截图软件(FastStone Capture) 好用,可以粘贴 / 复制. 可以做页面设计,有屏幕标尺,取色器.

  2. 音频播放 音乐 MediaPlayer

    MediaPlayer对象的生命周期如下: Idle 状态:当使用new()方法创建一个MediaPlayer对象或者调用了其reset()方法时,该MediaPlayer对象处于idle状态.这两种 ...

  3. 利用xlrd模块读取excel利用json模块生成相应的json文件的脚本

    excel的格式如下 python代码如下,这里最难的就是合并单元格的处理 import xlrd import json excel_obj = xlrd.open_workbook("t ...

  4. Java06-java基础语法(五)数组

    Java06-java基础语法(五)数组 一.循环的嵌套 在一个循环体内部再含有一个或多个循环 强调:内循环全部做完以后再去执行下一次的外循环 int k = 0; for(int i = 0; i& ...

  5. 简述 OAuth 2.0 的运作流程(转)

    原文地址:http://www.barretlee.com/blog/2016/01/10/oauth2-introduce/ 本文将以用户使用 github 登录网站留言为例,简述 OAuth 2. ...

  6. Selenium + Python + Firefox

    按网上教程搭建好环境后,执行下面的代码出现了错误: 测试代码如下: from selenium import webdriver driver=webdriver.Firefox() driver.g ...

  7. "//./root/CIMV2" because of error 0x80041003. Events cannot be delivered through this filter until the problem is corrected.

    windows系统日志错误信息: Event filter with query "SELECT * FROM __InstanceModificationEvent WITHIN 60 W ...

  8. better-scroll使用总结

    参考:https://zhuanlan.zhihu.com/p/27407024 better-scroll使用小结 核心就是这4个 <script> import BScroll fro ...

  9. Varnish 入门

    本文将介绍 varnish 的工作流程,安装以及 varnish 的配置三个方面的内容.首先简单的介绍 varnish 以及其工作流程,大概了解其内部原理,然后介绍了 varnish 的安装方法,最后 ...

  10. Win32消息循环机制等【转载】http://blog.csdn.net/u013777351/article/details/49522219

    Dos的过程驱动与Windows的事件驱动 在讲本程序的消息循环之前,我想先谈一下Dos与Windows驱动机制的区别: DOS程序主要使用顺序的,过程驱动的程序设计方法.顺序的,过程驱动的程序有一个 ...