2010-09-13 17 views
8

Quindi, ho una libreria di terze parti che ha bisogno di un File come input. Ho un byte array.Creazione di un file dall'array di byte

Non voglio scrivere i byte su disco .. Mi piacerebbe tenerlo in memoria. Qualche idea su come posso creare un File dal byte array fornito (senza scrivere sul disco)?

+0

Se si dispone del codice sorgente nella libreria di terze parti, è possibile modificarlo. Assicurati solo di sapere cosa stai facendo. –

risposta

10

Siamo spiacenti, non è possibile. Un file è intrinsecamente un'entità su disco, a meno che tu non abbia un disco RAM, ma non è qualcosa che puoi creare in Java.

Questo è esattamente il motivo per cui le API non devono essere basate su oggetti File (o essere sovraccaricate per accettare un InputStream).

+0

Che dire dell'utilizzo di RandomAccessFile? – desau

+1

Ciò non estende File o così. Vivi con esso (e dai la colpa a quegli API API di terze parti per un'API così imperfetta, la cosa migliore che puoi provare è pubblicare un bug report sul loro issuetracker). – BalusC

+0

Correggere e l'oggetto java.io.File è semplicemente una rappresentazione astratta del percorso. Ho decompilato e aggiornato le librerie di terze parti per meno, ma dovresti essere in grado di farla franca scrivendo un file con un nome GUID in una directory tmp e poi passando quel percorso. –

3

C'è una possibilità, ma è un vero colpo di scena.

Se l'API utilizza new FileReader(file) o new FileInputStream(file) allora stai hosed, ma ...

Se si converte il file in un URL o URI (utilizza toURL() o toURI()) poi, dal momento che File non è definitiva, è può passare in una sottoclasse di File in cui si controlla la costruzione dell'URL/URI e, cosa più importante, del gestore.

Ma le probabilità sono MOLTO sottili!

0

Quindi vedo che c'è una risposta accettata (e questa è vecchia), ma ho trovato un modo per farlo. Stavo usando l'API IDOL On Demand e avevo bisogno di convertire un byte array in un File.

Ecco un esempio di prendere una byte array di un'immagine e si trasforma in un 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); 

E così outputfile è un File che può essere utilizzato più avanti nel programma.