2010-09-13 11 views
8

A więc - mam bibliotekę innej firmy, która potrzebuje File jako danych wejściowych. Mam byte array.Tworzenie pliku z tablicy bajtowej

Nie chcę zapisywać bajtów na dysku. Chciałbym zachować to w pamięci. Masz pomysł, jak utworzyć File z podanego byte array (bez zapisywania na dysk)?

+0

Jeśli masz kod źródłowy do biblioteki strony trzeciej, możesz go zmodyfikować. Tylko upewnij się, że wiesz co robisz. –

Odpowiedz

10

Niestety, niemożliwe. Plik jest z natury jednostką na dysku, chyba że masz dysk RAM - ale to nie jest coś, co możesz stworzyć w Javie.

To jest dokładnie powód, dla którego interfejsy API nie powinny bazować na obiektach File (lub być przeciążone, aby zaakceptować InputStream).

+0

A co z korzystaniem z RandomAccessFile? – desau

+1

To nie rozszerza pliku lub tak. Korzystaj z niego (i obwiniaj autorów API innych firm za takie wadliwe API, najlepiej, co możesz spróbować, publikuje raport o błędach w swoim wydawcy). – BalusC

+0

Poprawnie, a obiekt java.io.File jest jedynie abstrakcyjną reprezentacją ścieżki. Dekompilowałem i zaktualizowałem biblioteki stron trzecich za mniej, ale powinieneś być w stanie uciec z pisaniem pliku z nazwą GUID do katalogu tmp, a następnie przekazaniem tej ścieżki. –

3

Jest jedna możliwość, ale jest to prawdziwa perspektywa.

Jeśli API używa new FileReader(file) lub new FileInputStream(file) to jesteś ladne, ale ...

Jeśli konwertuje plik do adresu URL lub URI (używając toURL() lub toURI()), a następnie, od File nie jest ostateczna, ty może przejść w podklasie File, w której kontrolujesz konstrukcję adresu URL/URI i, co ważniejsze, obsługi.

Ale szanse są bardzo szczupłe!

0

Tak więc widzę, że istnieje akceptowana odpowiedź (i to jest stara), ale znalazłem sposób, aby to zrobić. Używałem interfejsu API IDOL On Demand i potrzebne było przekonwertowanie byte array na File.

Oto przykład biorąc byte array obrazu i przekształcając 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); 

I tak outputfile jest File, które mogą być później wykorzystane w programie.

Powiązane problemy