手搓一个16进制编辑器

阅读量30763

发布时间 : 2024-10-08 14:02:23

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

设计原理:因为计算机中的所有文件以二进制(0和1)的形式存储,表示方式冗长,常常是一长串,所以,将其转换为结构较为紧凑的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);

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

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

6.byte[] buffer = new byte[1024]:创建一个字节缓冲区,这里尝试做了一些优化,减少I/O操作次数

7. String hex = Integer.toHexString(buffer[i] & 0xFF).toUpperCase():将字节转换为十六进制字符串,并确保长度为2,如果单个字符则前面补0

总结:

这个工具还有很多需要优化的点,例如两次读取文件,可以改为读取一次,字节缓冲区优化效果不太好,不过,新手第一次写这个工具,希望大佬们多多指点

本文由W4nk3r原创发布

转载,请参考转载声明,注明出处: https://www.anquanke.com/post/id/300291

安全客 - 有思想的安全新媒体

分享到:微信
+10赞
收藏
W4nk3r
分享到:微信

发表评论

W4nk3r

这个人太懒了,签名都懒得写一个

  • 文章
  • 2
  • 粉丝
  • 1

TA的文章

热门推荐

文章目录
内容需知
合作单位
  • 安全客
  • 安全客
Copyright © 北京奇虎科技有限公司 三六零数字安全科技集团有限公司 安全客 All Rights Reserved 京ICP备08010314号-66