2010-09-13 98 views
8

所以 - 我有一个需要File作为输入的第三方库。我有一个byte array从字节数组创建文件

我不想写字节到磁盘..我想保留在内存中。有关如何从提供的byte array(无需写入磁盘)创建File的任何想法?

+0

如果你有第三方库的源代码,你可以修改它。只要确保你知道你在做什么。 – 2010-09-13 21:53:28

回答

10

对不起,不可能。一个文件本质上是一个磁盘上的实体,除非你有一个RAM磁盘 - 但这不是你可以用Java创建的。

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

+0

使用RandomAccessFile怎么样? – desau 2010-09-13 21:32:40

+1

这不会扩展File左右。与它一起生活(并指责那些第三方API作者为这样一个有缺陷的API,最好你可以尝试在他们的issuetracker上发布一个bug报告)。 – BalusC 2010-09-13 21:33:29

+0

正确,而java.io.File对象仅仅是路径的抽象表示。我已经反编译并更新了第三方库,但是你应该能够将带有GUID名称的文件写入tmp目录,然后传递该路径。 – 2010-09-13 21:37:25

3

有一种可能性,但它是一个真正的远射。

如果API使用new FileReader(file)new FileInputStream(file)那么你大清洗,但...

如果将文件转换为URL或URI(使用toURL()toURI())然后,因为File不是终点,你可以传入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