手写一个16进制编辑器

前言:我们老师之前留了一个期末作业,涉及到手动编写一个文本编辑器,于是乎,我在原有代码的基础上,自己加入了一些功能

设计原理:因为计算机中的所有文件以二进制(0和1)的形式存储,表示方式冗长,常常是一长串,所以,将其转换为结构较为紧凑的16进制,更有利于用户的查看和编辑,目前,该编辑器只能查看文本文档或者图片数据的16进制形式,主要是为了打ctf自研一个😂

设计思路:

在编辑器原有的功能中加入可实现读取文件二进制,并将其转化为16进制的功能

部分实现过程:

头部代码讲解:

  1. 定义了HexText类,用于继承JFrame,生成一个窗口(弹窗)
  2. 定义JTextArea对象,用于多文本的输入和显示
  3. 定义JScrollPane对象,该对象作用为滚动条
  4. 定义一个JSpinner对象,用于调节显示的字体大小
  5. JButton,在java的swing库的作用为创建一个按钮,可以使用户与图形界面进行交互,当然,这里的作用是改变字体颜色
  6. JComboBox为一个下拉框组件,在这里的作用是选择显示的字体
  7. 定义label对象的作用为显示转换后的16进制字符,不过label的awt库据说已经过时了,所以这算是一个败笔

核心代码讲解:

  1. 在这里我定义了catchFile方法,用于打开文件
  2. 创建文件选择器,JFileChooser是swing库中的一个类,用于弹出对话框,让用户选择想要打开的文件
  3. 设置文件选择器的对话框标题  
  4. 加入if语句,判断用户是否确定打开该文件,如果该文件允许打开,则构建16进制内容和普通文本内容(StringBuilder)
  5.  try (InputStream in = new FileInputStream(file);  

BufferedReader reader = new BufferedReader(new InputStreamReader(in, StandardCharsets.UTF_8))) {

String line;这行代码的目的为尝试读取文件内容,try常常被用于处理异常,这里使用的目的为读取完内容后退出读取的进程,显示转换的内容

  1. byte[] buffer = new byte[1024]:创建一个字节缓冲区,这里尝试做了一些优化,减少I/O操作次数
  2.  String hex = Integer.toHexString(buffer[i] & 0xFF).toUpperCase():将字节转换为十六进制字符串,并确保长度为2,如果单个字符则前面补0

总结:

这个工具还有很多需要优化的点,字节缓冲区优化效果不太好,新手第一次写这个工具,希望大佬们多多指点

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值