0

首先,对不起我的英语和信息的长度。

我正在用 Java 编写一个简单的应用程序,用于学校项目的视觉密码学,该项目采用模式文件和秘密图像,然后使用模式中包含的信息创建 n 个图像。

对于秘密图像中的每个像素,应用程序在模式文件中查找一个矩阵,并在 n 个共享中写入 m 个像素(每个共享一行)。

模式文件包含编码所需的每种颜色的矩阵 (n*m),其组成如下

COLLECTION COLOR 1
START MATRIX 1
RGB
GBR
BGR
END
START MATRIX 2
.....
COLLECTION COLOR 2
START MATRIX 1
XXX
XXX
XXX
END
......
//

该文件可能只有几行或数千行,因此我无法将矩阵保存在应用程序中,但我需要始终读取该文件。

为了测试性能,我创建了一个解析器,它只需逐行搜索矩阵,但它非常慢。

我想我会保存每个矩阵的行号,然后使用 RandomAccessFile 读取它,但我想知道是否有更强大的方法来执行此操作。

谢谢

4

2 回答 2

1

如果您真正处理的大量输入文件超出了您将整个内容加载到 RAM 中的能力,那么使用像MapDB这样的持久键/值存储可能是一种简单的方法。解析文件一次并构建有效的 [Collection+Color]->Matrix 映射。将其存储在持久 HTree 中。这将为您处理所有缓存等。确保为 Collection+Color 元组创建一个好的散列函数,它应该非常高效。

如果您的数据访问模式倾向于聚集在一起,那么将其存储在 B+Tree 索引中可能会更快——您可以尝试一下,看看什么最有效。

于 2012-12-23T19:15:48.550 回答
0

对于您的架构文件,使用 aFileChannel并调用.map()它。只需稍加努力,您就可以计算文件映射表示的必要偏移量并使用它,甚至可以将此映射封装到自定义结构中。

于 2012-12-23T17:31:24.683 回答