相关疑难解决方法(0)

用Java获取文件的MD5校验和

我希望使用Java来获取文件的MD5校验和.我真的很惊讶,但我找不到任何显示如何获取文件的MD5校验和的内容.

怎么做?

java checksum md5

487
推荐指数
18
解决办法
39万
查看次数

Java:内存高效的ByteArrayOutputStream

我在磁盘中有一个40MB的文件,我需要使用字节数组将其"映射"到内存中.

起初,我认为将文件写入ByteArrayOutputStream是最好的方法,但我发现在复制操作期间的某个时刻需要大约160MB的堆空间.

如果不使用RAM文件大小的三倍,有人知道更好的方法吗?

更新:感谢您的回答.我注意到我可以减少内存消耗,稍微告诉ByteArrayOutputStream的初始大小要比原始文件大小稍大一些(使用我的代码强制重新分配的确切大小,得到检查原因).

还有另一个高内存点:当我用ByteArrayOutputStream.toByteArray返回byte []时.看看它的源代码,我可以看到它正在克隆数组:

public synchronized byte toByteArray()[] {
    return Arrays.copyOf(buf, count);
}
Run Code Online (Sandbox Code Playgroud)

我想我可以扩展ByteArrayOutputStream并重写此方法,以便直接返回原始数组.这里有没有潜在的危险,因为流和字节数组不会被多次使用?

java bytearray memory-mapped-files bytearrayoutputstream

16
推荐指数
3
解决办法
4万
查看次数

如何在不缓存的情况下测量文件读取速度?

我的java程序花了大部分时间来阅读一些文件,我想优化它,例如,通过使用并发,预取,内存映射文件或其他.

没有基准测试的优化是无意义的,所以我进行了基准测试.但是,在基准测试期间,整个文件内容都缓存在RAM中,与实际运行时不同.因此,基准测试的运行时间要小得多,而且很可能与现实无关.

我需要以某种方式告诉操作系统(Linux)不要缓存文件内容,或者更好地在每次基准测试运行之前清除缓存.或者可能消耗大部分可用的RAM(32 GB),因此只有一小部分文件内容适合.如何操作?

我正在使用卡尺进行基准测试,但在这种情况下我认为没必要(它绝不是微基准测试),我不确定这是个好主意.

java benchmarking caching disk-io caliper

14
推荐指数
1
解决办法
1987
查看次数

如何比较大文本文件?

关于你对我的"技巧"的看法,我有一个普遍的问题.

有2个文本文件(file_1file_2)需要相互比较.两者都非常庞大(3-4千兆字节,每个30,000,000到45,000,000行).我的想法是读取file_1内存中的几行(尽可能多),然后将它们与所有行进行比较file_2.如果匹配,则匹配的两个文件中的行应写入新文件.继续接下来的1000行,file_1并将这些行与所有行进行比较,file_2直到我file_1完全通过.

但这对我来说实际上非常非常耗时且复杂.你能想到比较这两个文件的任何其他方法吗?

您认为比较可能需要多长时间?对于我的计划,时间并不重要.我没有使用过如此庞大的文件的经验,因此我不知道这需要多长时间.它不应该超过一天.;-)但我担心我的技术会永远存在......

刚出现在我脑海中的Antoher问题:你会在内存中读到多少行?越多越好?有没有办法在实际尝试之前确定可能的行数?我想尽可能多地阅读(因为我认为这更快)但我经常用完内存.

提前致谢.

编辑 我想我必须多解释一下我的问题.

目的不是看两个文件是否相同(它们不是).每个文件中都有一些共享相同"特征"的行.这是一个例子: file_1看起来有点像这样:

mat1 1000 2000 TEXT      //this means the range is from 1000 - 2000
mat1 2040 2050 TEXT
mat3 10000 10010 TEXT
mat2 20 500 TEXT
Run Code Online (Sandbox Code Playgroud)

file_2看起来像这样:

mat3 10009 TEXT
mat3 200 TEXT
mat1 999 TEXT
Run Code Online (Sandbox Code Playgroud)

TEXT是指对我不感兴趣的字符和数字,mat可以来自mat1 - mat50并且没有顺序; 也可以有1000倍mat2(但下一列中的数字是不同的).我需要以这样的方式找到拟合线:matX在两个比较线中是相同的,所提到的数字file_2符合上述范围file_1.所以在我的例子中我会找到一个匹配:第3行 …

java comparison file

9
推荐指数
1
解决办法
1万
查看次数