20155322 《Java程序设计》课堂实践项目MyOD
20155322 《Java程序设计》课堂实践项目MyOD
实践要求
编写MyOD.java 用java MyOD XXX实现Linux下od -tx -tc XXX的功能
提交测试代码和运行结果截图,加上学号水印,提交码云代码链接。
实践内容
通过对课本305页和306页两个代码的理解,我写出了实现老师要求的代码
老师要求要和Linux下od -tx -tc XXX的功能的输出格式一模一样,于是我修改了我的代码:
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
/**
* Created by mac on 2017/5/31.
*/
public class MyOD {
public static void main(String[] args) throws IOException {
MyOD.dump(
new FileInputStream(args[0])
);
}
public static void dump(InputStream src)
throws IOException {
try (InputStream input = src) {
byte[] buf = new byte[50];
int k = input.read(buf, 0, buf.length); //读取100byte
//System.out.println(new String(buf)); 将这100byte打印出来,测试
int[] in = new int[buf.length]; //新建数组,储存其ASCII码值
for (int i = 0; i < in.length; i++) { //将byte的8位于1111_1111与
in[i] = buf[i]&0xff; //得到ASCII码值
}
int flat = 0,temp = 0,j = 0; //状态控制变量flag,循环控制变量temp,j
do {
if(flat == 0) {
while(temp < buf.length) {
if(buf[temp] != 0 ) { //如果有数据则打印
System.out.printf("%c ",buf[temp]);
temp++;
if(temp%16 == 0 && temp!=0){ //如果打印了16个就换行,flat置1
System.out.println(); //换行,并跳出循环,进行ASCII数组的输出
flat = 1;
break;
}
}
else {
flat = 3; //遍历完毕,flat置3,跳出do-while循环
j++;
}
}
}
else if(flat == 1) {
while(j < in.length) {
if(in[j]!=0) {
System.out.printf(Integer.toString(in[j], 0x10));
System.out.printf(" ");
j++;
if(j%16 == 0 && j!=0) { //如果打印了16个就换行,flat置0
System.out.println(); //换行,跳出循环,换到byte输出
flat = 0;
break;
}
}
else {
flat = 3; //遍历完毕,flat置3,跳出do-while循环
j++;
}
}
}
else System.out.println("wrong!");
if(flat == 3) break; //flat为3,跳出do-while循环
}while(flat == 0 || flat == 1);
}
System.out.println();
}
}
运行之后出现了这样的问题:

- 我发现问题出现的原因是因为下面这个
else没有进行break跳出,导致一直在flag=0状态中死循环,程序无法结束。
else {
flat = 3; //遍历完毕,flat置3,跳出do-while循环
j++;
- 于是我进行了修改,将
flat置1,使程序跳出循环后进入flat=1中进行ASCII码的输出,然后结束程序。
else {
System.out.println(); //buf[]遍历结束就转到ASCII把剩下的输出了
flat = 1;
break;
}
- 修改了代码并完善了注释后的程序完整代码:
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
/**
* Created by mac on 2017/5/31.
*/
public class MyOD {
public static void main(String[] args) throws IOException {
MyOD.dump(
new FileInputStream(args[0])
);
}
public static void dump(InputStream src)
throws IOException {
try (InputStream input = src) {
byte[] buf = new byte[50];
int k = input.read(buf, 0, buf.length); //读取100byte
//System.out.println(new String(buf)); 将这100byte打印出来,测试
int[] in = new int[buf.length]; //新建数组,储存其ASCII码值
for (int i = 0; i < in.length; i++) { //将byte的8位于1111_1111与
in[i] = buf[i]&0xff; //得到ASCII码值
}
int flat = 0,temp = 0,j = 0; //状态控制变量flag,循环控制变量temp,j
do {
if(flat == 0) {
while(temp < buf.length) {
if(buf[temp] != 0 && buf[temp] != 10) { //如果有数据,并且不是换行则打印
System.out.printf("%c ",buf[temp]);
temp++;
if(temp%16 == 0 && temp!=0){ //如果打印了16个就换行,flat置1,换到ASCII输出
System.out.println();
flat = 1;
break;
}
}
else {
System.out.println(); //buf[]遍历结束就转到ASCII把剩下的输出了
flat = 1;
break;
}
}
}
else if(flat == 1) {
while(j < in.length) {
if(in[j]!=0 && in[j] != 10) { //如果有数据,并且不是换行则打印
System.out.printf(Integer.toString(in[j], 0x10));
System.out.printf(" ");
j++;
if(j%16 == 0 && j!=0) { //如果打印了16个就换行,flat置0,换到BYTE输出
System.out.println();
flat = 0;
break;
}
}
else {
flat = 3; //所有的数据输出完毕,flat置3,跳出大循环,结束程序
break;
}
}
}
else System.out.println("wrong!");
if(flat == 3) break;
}while(flat == 0 || flat == 1); //只要flat不为3,继续循环
}
}
}
- 我使用的输入文本内容为:
abcdeafjkdhoahgweuiiughwjndknagjhgfuqiut
最后实现效果如图(图一为第一次的效果,图二为修改后的效果):


链接
20155322 《Java程序设计》课堂实践项目MyOD的更多相关文章
- 20155307 《Java程序设计》课堂实践项目MyOD
一开始没理解老师的要求,交的截图是错误的. import java.io.FileInputStream; import java.io.IOException; import java.io.Inp ...
- 20155322 《Java程序设计》课堂实践项目 数据库-3-4
20155322 <Java程序设计>课堂实践项目 数据库-3-4 数据库-3 实践要求 参考教材代码完成下面的要求,提交能连接到world的截图(有学号水印),并提交代码的码云链接.查询 ...
- 《Java 程序设计》课堂实践项目 课后学习总结
<Java 程序设计>课堂实践项目 课后学习总结 String类的使用(sort) 目录 Linux命令(sort) 课堂实践 课后思考 学习老师的代码之后的思考:int与Integer ...
- 《Java 程序设计》课堂实践项目汇总链接
1.<Java 程序设计>课堂实践项目-命令行参数 2.<Java 程序设计>课堂实践项目-mini dc 3.<Java 程序设计>课堂实践项目-Arrays和S ...
- 《Java 程序设计》课堂实践项目-类定义
<Java 程序设计>课堂实践项目类定义 课后学习总结 目录 改变 类定义实验要求 课堂实践成果 课后思考 改变 修改了博客整体布局,过去就贴个代码贴个图很草率,这次布局和内容都有修改. ...
- 《Java 程序设计》课堂实践项目-简易计算器
<Java 程序设计>课堂实践项目简易计算器 课后学习总结 目录 改变 简易计算器实验要求 课堂实践成果 课后思考 改变 修改了博客整体布局,过去就贴个代码贴个图很草率,这次布局和内容都有 ...
- 《Java 程序设计》课堂实践项目-Arrays和String单元测试
<Java 程序设计>课堂实践项目-Arrays和String单元测试 课后学习总结 目录 改变 Arrays和String单元测试实验要求 课堂实践成果 课后思考 改变 修改了博客整体布 ...
- 20155308 2016-2017-2《Java程序设计》课堂实践项目
20155308 2016-2017-2<Java程序设计>课堂实践项目 在java.lang包中有String.split()方法,返回是一个数组 我在应用中用到一些,给大家总结一下,仅 ...
- # 20155308 2016-2017-2《Java程序设计》课堂实践项目 5月17日
20155308 2016-2017-2<Java程序设计>课堂实践项目 5/17 本次因为git出现了问题,所以没有按时提交我的代码 问题一 在IDEA中对P145 MathTool.j ...
随机推荐
- 遍历Map集合的几种方式
import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Map.Entr ...
- 聊聊host中ip/域名映射记录的解析规则
今天宝叔突然在群里发了个问题; host做如下配置,a.com会指向哪里?或者说ping一下a.com结果会是什么? 127.0.0.1 a.com 192.168.4.106 a.com 192.1 ...
- python读取xml文件报错ValueError: multi-byte encodings are not supported
1.在使用python对xml文件进行读取时,提示ValueError: multi-byte encodings are not supported 很多贴子上说把xml的编码格式改为,就可以正常执 ...
- 无法执行程序。所执行的命令为 "C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe" /noconfig /fullpaths @"C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\root\b411ea32\b48a9fb\aun5r0xd.c
解决方案 将应用程序池进程模型中的标识设为“LocalSystem”即可.
- Java 使用poi导入excel,结合xml文件进行数据验证的例子(增加了jar包)
ava 使用poi导入excel,结合xml文件进行数据验证的例子(增加了jar包) 假设现在要做一个通用的导入方法: 要求: 1.xml的只定义数据库表中的column字段,字段类型,是否非空等条件 ...
- 1、Python代码初识
由于python2.7版本默认使用的是ASCII码,必须在编写前加入两行代码,表示使用UTF-8码. #!/usr/bin/python # -*- coding:utf-8 -*- print('你 ...
- [19/05/01-星期三] GOF23_行为型模式(策略模式、模板方法模式)
一.策略模式(strategy) [策略接口] /*** * "策略"接口 */ package cn.sxt.strategy; public interface Strateg ...
- 4、RabbitMQ-消息应答与消息持久化
消息应答( Message acknowledgment) 1. Message acknowledgment(消息应答) 执行任务可能需要几秒钟.你可能想知道如果其中一个消费者开始一项长期任务并且只 ...
- 一起玩树莓派3+使用Gitlab搭建专业Git服务
http://bbs.eeworld.com.cn/thread-505256-1-1.html https://packages.gitlab.com/gitlab/raspberry-pi2 ht ...
- 创建DBLink----Oracle和mysql
Oracle: DROP PUBLIC DATABASE LINK NM_HN; CREATE PUBLIC DATABASE LINK NM_HN CONNECT TO XZXT IDENTIFIE ...