从字节数组创建文件

9

所以 - 我有一个需要File作为输入的第三方库,我有一个byte array

我不想将字节写入磁盘..我希望将其保存在内存中。 你有任何想法吗?如何从提供的byte array创建一个File(而不写入磁盘)?


如果您拥有第三方库的源代码,您可以对其进行修改。只需确保您知道自己在做什么。 - Leo Izen
3个回答

10

很抱歉,这是不可能的。文件本质上是一个磁盘实体,除非您有一个RAM磁盘 - 但这不是您可以在Java中创建的。

这正是为什么API不应该基于File对象(或者重载为接受InputStream)的原因。


使用RandomAccessFile怎么样? - desau
1
这个不是继承自File类或其他类。就这样吧(并且把责任归咎于那些第三方API的作者,因为他们提供了一个有缺陷的API,你最好尝试在他们的问题跟踪器上提交一个错误报告)。 - BalusC
正确的,java.io.File对象仅仅是路径的抽象表示。我已经反编译并更新了第三方库以供使用,但你应该可以通过将文件写入一个带有GUID名称的临时目录,然后传递该路径来完成。 - Peter DeWeese
1
不完全是...它还具有一些有用的功能,可以返回URL或URI,这是可以利用的...请看我的回答。 - dty

3
有一种可能性,但是成功率非常低。
如果API使用new FileReader(file)new FileInputStream(file),那么您就没有办法了,但是...
如果它将文件转换为URL或URI(使用toURL()toURI()),那么由于File不是final类,您可以传递File的子类,其中您控制URL / URI和更重要的处理程序的构造。
但是成功的机会非常微小!

0

我看到有一个被接受的答案(而且这是旧的),但我找到了一种方法来做到这一点。我正在使用IDOL On Demand API,并需要将byte array转换为File

这里是一个将图像的byte array转换为File的示例:

//imageByte is the byte array that is already defined
BufferedImage image = null;
ByteArrayInputStream bis = new ByteArrayInputStream(imageByte);
image = ImageIO.read(bis);
bis.close();

// write the image to a file
File outputfile = new File("image.png");
ImageIO.write(image, "png", outputfile);

因此,outputfile 是一个 File,可以在程序中稍后使用。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接