20155228 2017-5-31 课堂测试:编写MyOD.java

题目和要求

编写MyOD.java:用java MyOD XXX实现Linux下od -tx -tc XXX的功能

提交测试代码和运行结果截图,加上学号水印,提交码云代码链接。

分析和设计

  1. import java.io.*;
  2. /**
  3. * Created by besti20155228 on 17-5-31.
  4. */
  5. public class code053102 {
  6. public static void main(String[] args) throws IOException {
  7. FileReader reader = new FileReader(args[0]);//新建FileReader实例,将args[0]的内容作为源文件实例
  8. StringWriter writer = new StringWriter();//新建StringWriter实例
  9. code053103.dump(reader, writer);//调用dump方法进行处理
  10. }
  11. }
  12. class code053103 {
  13. public static void dump(Reader src, Writer dest) throws IOException {
  14. try (Reader input = src; Writer output = dest)//检查地址是否正确 {
  15. char[] data = new char[1024];//定义一个字符数组用来装读取到的内容
  16. int[] number = new int[1024];//定义一个数组用来装读取的内容的ascii码
  17. int length;
  18. int n;
  19. String temp=new String();//定义一个字符串用来装读取到的内容的ascii码的16进制形式数
  20. String string=new String();
  21. while ((length = input.read(data)) != -1)//成功读取到字符 {
  22. output.write(data, 0, length);//将源文件内容放到目的文件中
  23. }
  24. for (n = 0; n < 1024; n++) {
  25. if (data[n] != 0)
  26. {
  27. System.out.print(data[n]);//打印读取到的字符
  28. if ((n + 1) % 32 == 0)//每隔16个字符打印一个空格,源文件中的空格也算一个字符,所以是32个
  29. System.out.println();
  30. }
  31. }
  32. for (n = 0; n < 1024; n++) {
  33. number[n] = (int) data[n];//将读取的字符转换为ascii码
  34. temp=Integer.toHexString(number[n]);//将ascii码换成16进制数
  35. string=string+" "+temp;//把16进制的ascii码放到string中
  36. if (number[n] != 0) {
  37. if (number[n] != 32 && number[n]!=10)//不打印空格的ascii码,也不打印不到1024位的部分 {
  38. System.out.print(number[n]);
  39. System.out.print(" ");
  40. }
  41. if ((n + 1) % 32 == 0)//每隔16个字符打印一个空格,源文件中的空格也算一个字符,所以是32个
  42. System.out.println();
  43. }
  44. }
  45. System.out.println(string);//打印16进制的ascii码
  46. }
  47. }
  48. }

问题和解决

  • 本来是想直接教材第十章开头的代码的思路,以byte为单位读入文件内容的。但是后来想起一个字符是2个byte,如果按btye的格式读入的话就把字符的编码给拆开了,所以最后用了FileReader和StringWriter以字符为单位读入。

  • 将字符转换成ascii码:通过查阅教材发现FileReader读入字符实际上就是读入ascii码值,所以强制类型转换就可以了
  1. number[n] = (int) data[n];
  • 根据要求每16个字符进行1次换行,但是if语句设为(n + 1) % 16 == 0)的时候发现每隔8个字符就换行了,后来仔细思考想到空格也要算一个字符!所以代码应该改为:
  1. if ((n + 1) % 32 == 0)//每隔16个字符打印一个空格,源文件中的空格也算一个字符,所以是32个
  2. System.out.println();
  • 将10进制ascii码转换成16进制ascii码可以直接调用Integer.toHexString方法:
  1. temp=Integer.toHexString(number[n]);//将ascii码换成16进制数
  2. string=string+" "+temp;//把16进制的ascii码放到string中

代码和结果

  • 运行截图

代码链接

20155228 2017-5-31 课堂测试:编写MyOD.java的更多相关文章

  1. 20155306 2017-2018-1《信息安全系统设计》第二周课堂测试以及myod的实现

    20155306 2017-2018-1<信息安全系统设计>第二周课堂测试以及myod的实现 第二周课堂测验: (注:前两项在课堂已提交,在此不做详解) 第一项: 每个.c一个文件,每个. ...

  2. 03.大型数据库应用技术课堂测试3(java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;Ljava/lang/Object;)V)

    本次问题主要出在了之前没有安装hive,结构导致大部分时间花在了安装上面,主要一直报错,网上找不到相关教程.

  3. 20155322 《Java程序设计》课堂实践项目MyOD

    20155322 <Java程序设计>课堂实践项目MyOD 实践要求 编写MyOD.java 用java MyOD XXX实现Linux下od -tx -tc XXX的功能 提交测试代码和 ...

  4. java课堂测试2(两种方式)

    实验源代码 这是不使用数组形式的源代码 /* 2017/10/10 王翌淞 课堂测试2 */import java.util.Scanner; public class Number { public ...

  5. 【课堂实践】Myod

    实验内容 编写MyOD.java 用java MyOD XXX实现Linux下od -tx -tc XXX的功能 实验代码 od.java 截图 遇到的问题及解决办法 一开始想的方向是将得出的功能结果 ...

  6. 【课堂实践】Myod和Mycp

    实验内容 编写MyOD.java 用java MyOD XXX实现Linux下od -tx -tc XXX的功能 实验代码 od.java 截图 遇到的问题及解决办法 一开始想的方向是将得出的功能结果 ...

  7. 20155228 2017-5-10 课堂测试:Arrays和String单元测试

    20155228 2017-5-10 课堂测试:Arrays和String单元测试 题目和要求 在IDEA中以TDD的方式对String类和Arrays类进行学习 测试相关方法的正常,错误和边界情况 ...

  8. 20155207第二周myod以及课堂测试

    第二周myod以及课堂测试 第二周测试5 题目 1.除了main.c外,其他4个模块(add.c sub.c mul.c div.c)的源代码不想给别人,如何制作一个mymath.so共享库?main ...

  9. 20155319 2017-2018-1《信息安全系统设计》第四周课堂测试、Makefile、myod

    20155319 2017-2018-1<信息安全系统设计>第四周课堂测试.Makefile.myod 测试2-gcc测试 1.用gcc 进行预处理,编译,汇编,链接vi输入的代码 2.生 ...

随机推荐

  1. Javascript 面向对象编程(一):封装 作者:yuan一峰

    学习Javascript,最难的地方是什么? 我觉得,Object(对象)最难.因为Javascript的Object模型很独特,和其他语言都不一样,初学者不容易掌握. 下面就是我的学习笔记,希望对大 ...

  2. 主动触发input框的失去焦点事件,阻止输入法跳出

    今天遇到个问题,我在手机做一个选择生日的功能,但是当我点击input框时,事件选择插件和输入法都弹出来了,很丑,然后就想阻止输入法弹出来, 网上一个方法是:在input框的获取焦点事件里,主动触发失去 ...

  3. 洛谷P3250 网络 [HNOI2016] 整体二分

    正解:整体二分+树状数组 解题报告: 传送门! 亲这里的建议是用整体二分呢 dbq最近看sd淘宝说话体看多了有点脑抽,,, 首先考虑如果是单组询问怎么做昂QAQ 考虑二分答案 对于所有比mid小的操作 ...

  4. Pycharm常用配置

    Pycharm常用配置 pycharm中的设置是可以导入和导出的,file>export settings 可以保存当前pycharm中的设置为jar文件,重装时可以直接import setti ...

  5. GUI库之Tkinter组件(二)

    一.Lable组件 Lable组件是用于在界面上输出描述的标签: 1.举个例子. # Lable组件 from tkinter import * root = Tk() root.title(&quo ...

  6. 数据库 - Navicat与pymysql模块

    一.Nabicat 在生产环境中操作MySQL数据库还是推荐使用命令行工具mysql,但在我们自己开发测试时, 可以使用可视化工具Navicat,以图形界面的形式操作MySQL数据库 官网下载:htt ...

  7. 解决ios10以上点击缩放的问题

    禁止ios10以上点击缩放,代码如下: <script> window.onload=function () { document.addEventListener('touchstart ...

  8. Python 全栈开发六 常用模块学习

    本节大纲: 模块介绍 time &datetime模块 random os sys shutil json & picle shelve configparser hashlib 一. ...

  9. AC自动机模板2

    题目链接:https://www.luogu.org/problemnew/show/P3796 #include <cstdio> #include <cmath> #inc ...

  10. vue的分页组件

    <template> <div class="page-nav"> <div class="page-btn-wrap"> ...