20170531 课堂实践 MyOD

Java实现Linux od命令
本文介绍如何使用Java语言实现Linux下的od命令功能,该命令用于以不同进制和ASCII码形式展示文件内容。通过具体代码示例展示了如何读取文件并以十六进制和ASCII码形式输出。

MyOD

题目

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

Linux下od功能详解

od(octal dump)命令可以以八进制、十进制、十六进制和ASCII码来显示文件或者流,它们对于访问或可视地检查文件中不能直接显示在终端上的字符

  • 使用:od [-A 地址进制] [-t 显示格式] 文件
  • 进制
    • o 八进制(系统默认值)
    • d 十进制
    • x 十六进制
    • n 不打印位移值
  • 格式
    • c ASCII字符或反斜杠序列(如\n)
    • d 有符号十进制数
    • f 浮点数
    • o 八进制(系统默认值)
    • u 无符号十进制数
    • x 十六进制数
  • e.g.
radish608@kali:~$ cat abc
123abc
a
s
d
radish608@kali:~$ od -tc -tx abc 
0000000   1   2   3   a   b   c  \n   a  \n   s  \n   d  \n
               61333231        610a6362        640a730a        0000000a
0000015

Java实现OD功能

/**
 * Created by radish608 on 17-5-31.
 */

import java.io.*;

class IO {
    public static void dump(InputStream src) throws IOException {
        try (InputStream input = src) {
            byte[] data = new byte[1024];
            int i, flag;
            input.read(data);
            for (i = 0; i < 1024; i = i + 4) {
                if (i % 16 == 0) {
                    System.out.printf("\n%07o\t\t", i );
                }
                System.out.printf(" %02x%02x%02x%02x\t", data[i + 3], data[i + 2], data[i + 1], data[i]);
                if ((i + 4) % 16 == 0) {
                    System.out.println();
                    System.out.printf("\t  ");
                    for (int j = i - 12; j < i+4 ; j++) {
                        if ((int) data[j] == 10) {
                            System.out.printf(" \\");
                            System.out.printf("n ");
                        } else {
                            System.out.printf("  %c ", data[j]);
                        }
                    }
                }
                if (data[i+4] ==0 ) {
                    System.out.println();
                    System.out.printf("\t   ");
                    for (int j = i-i%16; data[j-3] != 0; j++) {
                        if ((int) data[j] == 10) {
                            System.out.printf(" \\");
                            System.out.printf("n  ");
                        } else {
                            System.out.printf(" %c ", data[j]);
                        }
                    }
                    break;
                }
            }
            System.out.printf("\n%07o\n", i+3 );
        }
    }

}

public class MyOD {
    public static void main(String[] args) throws IOException {
        IO.dump(new FileInputStream(args[0]));
    }
}
  • 范例文件内容
123abc12345
a
s
d12adfadfa
  • 运行结果
    1043723-20170601164514680-1261241945.png

转载于:https://www.cnblogs.com/dky20155212/p/6929651.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值