安全客 2024年10月08日
手搓一个16进制编辑器
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文介绍了一个手动编写的文本编辑器,作者在原有代码基础上加入功能。将二进制文件转换为十六进制,利于用户查看和编辑。文中详细说明了部分实现过程及核心方法实现逻辑,同时也指出了工具存在的一些待优化点。

🎈定义了HexText类用于继承JFrame生成窗口,还定义了JTextArea对象用于多文本输入和显示,JScrollPane对象作为滚动条,JSpinner对象用于调节字体大小,JButton用于改变字体颜色,JComboBox用于选择显示字体,以及label对象用于显示转换后的十六进制字符(但该库已过时)。

💻定义了catchFile方法用于打开文件,创建文件选择器JFileChooser弹出对话框让用户选择文件,设置对话框标题,通过if语句判断用户是否确定打开,若允许则构建十六进制和普通文本内容,并尝试读取文件内容,还创建字节缓冲区进行优化。

📋总结指出工具存在一些需要优化的点,如两次读取文件可改为一次,字节缓冲区优化效果不太好,作者作为新手希望得到大佬指点。

前言:我们老师之前留了一个期末作业,涉及到手动编写一个文本编辑器,于是乎,我在原有代码的基础上,自己加入了一些功能设计原理:因为计算机中的所有文件以二进制(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总结:这个工具还有很多需要优化的点,例如两次读取文件,可以改为读取一次,字节缓冲区优化效果不太好,不过,新手第一次写这个工具,希望大佬们多多指点

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

文本编辑器 十六进制转换 功能实现 优化点
相关文章