20155228 2017-5-31 课堂测试:编写MyOD.java
20155228 2017-5-31 课堂测试:编写MyOD.java
题目和要求
编写MyOD.java:用java MyOD XXX实现Linux下od -tx -tc XXX的功能
提交测试代码和运行结果截图,加上学号水印,提交码云代码链接。
分析和设计
import java.io.*;
/**
* Created by besti20155228 on 17-5-31.
*/
public class code053102 {
public static void main(String[] args) throws IOException {
FileReader reader = new FileReader(args[0]);//新建FileReader实例,将args[0]的内容作为源文件实例
StringWriter writer = new StringWriter();//新建StringWriter实例
code053103.dump(reader, writer);//调用dump方法进行处理
}
}
class code053103 {
public static void dump(Reader src, Writer dest) throws IOException {
try (Reader input = src; Writer output = dest)//检查地址是否正确 {
char[] data = new char[1024];//定义一个字符数组用来装读取到的内容
int[] number = new int[1024];//定义一个数组用来装读取的内容的ascii码
int length;
int n;
String temp=new String();//定义一个字符串用来装读取到的内容的ascii码的16进制形式数
String string=new String();
while ((length = input.read(data)) != -1)//成功读取到字符 {
output.write(data, 0, length);//将源文件内容放到目的文件中
}
for (n = 0; n < 1024; n++) {
if (data[n] != 0)
{
System.out.print(data[n]);//打印读取到的字符
if ((n + 1) % 32 == 0)//每隔16个字符打印一个空格,源文件中的空格也算一个字符,所以是32个
System.out.println();
}
}
for (n = 0; n < 1024; n++) {
number[n] = (int) data[n];//将读取的字符转换为ascii码
temp=Integer.toHexString(number[n]);//将ascii码换成16进制数
string=string+" "+temp;//把16进制的ascii码放到string中
if (number[n] != 0) {
if (number[n] != 32 && number[n]!=10)//不打印空格的ascii码,也不打印不到1024位的部分 {
System.out.print(number[n]);
System.out.print(" ");
}
if ((n + 1) % 32 == 0)//每隔16个字符打印一个空格,源文件中的空格也算一个字符,所以是32个
System.out.println();
}
}
System.out.println(string);//打印16进制的ascii码
}
}
}
问题和解决
- 本来是想直接教材第十章开头的代码的思路,以byte为单位读入文件内容的。但是后来想起一个字符是2个byte,如果按btye的格式读入的话就把字符的编码给拆开了,所以最后用了FileReader和StringWriter以字符为单位读入。

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

20155228 2017-5-31 课堂测试:编写MyOD.java的更多相关文章
- 20155306 2017-2018-1《信息安全系统设计》第二周课堂测试以及myod的实现
20155306 2017-2018-1<信息安全系统设计>第二周课堂测试以及myod的实现 第二周课堂测验: (注:前两项在课堂已提交,在此不做详解) 第一项: 每个.c一个文件,每个. ...
- 03.大型数据库应用技术课堂测试3(java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;Ljava/lang/Object;)V)
本次问题主要出在了之前没有安装hive,结构导致大部分时间花在了安装上面,主要一直报错,网上找不到相关教程.
- 20155322 《Java程序设计》课堂实践项目MyOD
20155322 <Java程序设计>课堂实践项目MyOD 实践要求 编写MyOD.java 用java MyOD XXX实现Linux下od -tx -tc XXX的功能 提交测试代码和 ...
- java课堂测试2(两种方式)
实验源代码 这是不使用数组形式的源代码 /* 2017/10/10 王翌淞 课堂测试2 */import java.util.Scanner; public class Number { public ...
- 【课堂实践】Myod
实验内容 编写MyOD.java 用java MyOD XXX实现Linux下od -tx -tc XXX的功能 实验代码 od.java 截图 遇到的问题及解决办法 一开始想的方向是将得出的功能结果 ...
- 【课堂实践】Myod和Mycp
实验内容 编写MyOD.java 用java MyOD XXX实现Linux下od -tx -tc XXX的功能 实验代码 od.java 截图 遇到的问题及解决办法 一开始想的方向是将得出的功能结果 ...
- 20155228 2017-5-10 课堂测试:Arrays和String单元测试
20155228 2017-5-10 课堂测试:Arrays和String单元测试 题目和要求 在IDEA中以TDD的方式对String类和Arrays类进行学习 测试相关方法的正常,错误和边界情况 ...
- 20155207第二周myod以及课堂测试
第二周myod以及课堂测试 第二周测试5 题目 1.除了main.c外,其他4个模块(add.c sub.c mul.c div.c)的源代码不想给别人,如何制作一个mymath.so共享库?main ...
- 20155319 2017-2018-1《信息安全系统设计》第四周课堂测试、Makefile、myod
20155319 2017-2018-1<信息安全系统设计>第四周课堂测试.Makefile.myod 测试2-gcc测试 1.用gcc 进行预处理,编译,汇编,链接vi输入的代码 2.生 ...
随机推荐
- js数组方法汇总
下面主要汇总一下数组的方法 数组方法: 1.检测是否为数组的方法:Array.isArrray(); var arr=[1,2,3,4,5]; var str='string'; console.lo ...
- java JDBC (二) 防止注入/参数化
package cn.sasa.demo2; import java.sql.Connection; import java.sql.DriverManager; import java.sql.Pr ...
- java 线程 (二) 线程池
package cn.sasa.demo2; import java.util.concurrent.ExecutorService; import java.util.concurrent.Exec ...
- codechef Sum of Cubes 图论
正解:图论+数学 解题报告: 先放个传送门QwQ 然后放下题目大意?就说给定简单图,无自环或重边,然后求(∑e[i][j])k,i,j∈S,S为点集的子集 然后因为k的取值只有[1,3],所以这里分类 ...
- luogu4389 付公主的背包
题目链接:洛谷 题目大意:现在有$n$个物品,每种物品体积为$v_i$,对任意$s\in [1,m]$,求背包恰好装$s$体积的方案数(完全背包问题). 数据范围:$n,m\leq 10^5$ 这道题 ...
- Swift中"#"的用法
配置外部参数名 在函数(或者方法)的参数名前添加"#",可以使该参数拥有相同的本地参数名和外部参数名. 注:在方法中,第二个及后续的参数,默认是具有和内部参数一致的外部参数名的,只 ...
- 【JMeter】接口自动化环境搭建
我们在学习接口自动化的时候,最理想的状态是在公司有项目可以操作.大部分时候我们并没有可以练习的项目,因此练习接口无从谈起,只能找一些开放的api来练一练,但是这样并不能提高我们的技术.因此我们需要搭建 ...
- CGPoint,CGSize,CGRect转NSString以及CGRect的一些便捷实用方法
打印代码小技巧 UIKIT_EXTERN NSString *NSStringFromCGPoint(CGPoint point); UIKIT_EXTERN NSString *NSStringFr ...
- 005-docker-镜像使用、拉取、运行、创建、打tag
当运行容器时,使用的镜像如果在本地中不存在,docker 就会自动从 docker 镜像仓库中下载,默认是从 Docker Hub 公共镜像源下载. 1.列出所有本地镜像 docker images ...
- 50A
#include <iostream> using namespace std; int main() { int m, n; cin>>m>>n; cout< ...