2010-09-13 124 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