输入十六进制文件可以包含至少一百万行数据。因此,GUI 应该显示所有这些。
当前实施:
- JTable的创建。
- 通过在 Swing 中扩展 DefaultTableModel 类来创建模型。例如十六进制模型
- 创建长度为 0x10000 的字符串数组 eg String[] dataString = new String[0x10000] 因为 Intel hex 文件中的每个地址记录最多可以有 0x10000 个数据记录。
- 使用 GAP 字符串预填充此 String 数组,例如 * 。我们还需要在 GUI 中显示 hex 文件的 GAP。
- 通过遍历当前地址记录的所有数据记录,将来自 hex 文件模型(通过解析输入 hex 文件创建)的数据字节数组存储到字符串数组 dataString 中。
- 创建字符串数组,例如长度为 0x12 的 rowString,以存储地址、数据部分的字符串格式和数据部分的 ASCII 字符串。
- 遍历长度为 0xFFFF 即 0x10000 - 1 的数据记录,并将以下内容存储到 rowString 数组中。一个。将地址存储到第一个索引中。湾。存储长度为 0x10 的 dataString 数组中的数据。C。存储 ASCII 字符串。(通过获取每个数据字节的 ASCII 值创建 ASCII 字符串,将它们附加到 StringBuilder 并将其转换为字符串)最后,将 rowString 数组添加到 HexModel。
- 一旦完成所有地址记录及其各自数据记录的迭代,HexModel 将更新为 JTable。
请注意,启动 GUI 时没有性能问题。仅具有 50 万条记录的十六进制文件(10MB 文件)需要 2 到 3 秒。
但是内存消耗是一个大问题。对于 10MB 的十六进制文件,内存需要 250MB。主要问题是,尽管我从 GUI 的选项卡式窗格中关闭了加载的文件,但内存并没有减少。
我知道 String 被大量使用。但是处理这个用例的最佳方法是什么?
请求您对此内存问题的意见。
提前致谢。