This question already has answers here:
Construct a java.io.File that reads from a byte array

(4个答案)


去年关闭。




简而言之:我想将字节数组或String转换为File对象,以便可以将此File对象用作无法更改其签名的方法的参数。我想实现此内存,而无需接触驱动器。

我在这里阅读了许多similar questions,包括有关使用File.createTempFile的建议,但给人的印象是,即使只是临时的,我们仍在创建物理文件?

完整:我正在帮助一个非常复杂的数据恢复项目。假设我们现在有一个超过400GB的磁盘映像,它是2MB部分的集合。我要恢复的某些文件开始于一个文件,结束于另一个2MB部分。我们有一个清单,可以看到起点和终点,所以现在我想将起点和终点缝合在一起,然后检查结果是否为某种专有格式的有效文件。 (这是所有背景信息,请不要进入其中!)

我有一个Java类(无法更改),该类可以读取并验证这些文件。因此,我只想将我的放在一起的文件输入此方法。如果成功,则继续进行下一个“开始部分”,否则我尝试将开始部分与其他结束部分匹配。

我想将“缝合在一起的文件”保留在内存中(而不是将其写入临时文件),因为很显然我需要高效。这是不得已的方法;确实,我们需要将成千上万的开头与成千上万的结尾进行匹配。但是,再次让我们继续这个问题:)

最佳答案

如果您的Java类接受File,即文件系统中的文件路径,那么是的,您必须在文件系统中创建一个文件,然后将文件路径提供给Java类。您可以通过在RAM驱动器中创建文件来加快处理速度,但是它还是一个文件。如果该类还接受InputStream(设计良好的类可以),则可以使用ByteArrayInputStream。该类可以接受输入数据的另一个可能接口是Java NIO机械,ReadableByteChannel是抽象java.io.InputStream的NIO模拟

07-24 09:37
查看更多