Creating a File from byte array

2020-02-12 05:19发布

So - I've got a third party library that needs a File as input. I've got a byte array.

I don't want to write the bytes to disk .. I'd like to keep this in memory. Any idea on how I can create a File from the provided byte array (without writing to disk)?

3条回答
地球回转人心会变
2楼-- · 2020-02-12 05:54

So I see there is an accepted answer (and this is old), but I found a way to do this. I was using the IDOL On Demand API and needed to convert a byte array to a File.

Here is an example of taking a byte array of an image and turning into a 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);

And so outputfile is a File that can be used later in your program.

查看更多
小情绪 Triste *
3楼-- · 2020-02-12 06:04

Sorry, not possible. A File is inherently an on-disk entity, unless you have a RAM disk - but that's not something you can create in Java.

That's exactly the reason why APIs should not be based on File objects (or be overloaded to accept an InputStream).

查看更多
ゆ 、 Hurt°
4楼-- · 2020-02-12 06:11

There's one possibility, but it's a real long-shot.

If the API uses new FileReader(file) or new FileInputStream(file) then you're hosed, but...

If it converts the file to a URL or URI (using toURL() or toURI()) then, since File is not final, you can pass in a subclass of File in which you control the construction of the URL/URI and, more importantly, the handler.

But the chances are VERY slim!

查看更多
登录 后发表回答