Создание файла из массива байтов

Итак, у меня есть сторонняя библиотека, для которой в качестве входных данных требуется File. У меня есть byte array.

Я не хочу записывать байты на диск. Я хотел бы сохранить это в памяти. Любая идея о том, как я могу создать File из предоставленного byte array (без записи на диск)?


person desau    schedule 13.09.2010    source источник
comment
Если у вас есть исходный код сторонней библиотеки, вы можете изменить его. Просто убедитесь, что вы знаете, что делаете.   -  person Leo Izen    schedule 14.09.2010


Ответы (3)


Извините, невозможно. Файл по своей сути является объектом на диске, если у вас нет RAM-диска, но это не то, что вы можете создать в Java.

Именно по этой причине API-интерфейсы не должны основываться на объектах File (или быть перегруженными для приема InputStream).

person Michael Borgwardt    schedule 13.09.2010
comment
Как насчет использования RandomAccessFile? - person desau; 14.09.2010
comment
Это не расширяет File или около того. Смиритесь с этим (и обвините этих сторонних авторов API в таком некорректном API, лучшее, что вы можете попробовать, — это опубликовать отчет об ошибке в их системе отслеживания проблем). - person BalusC; 14.09.2010
comment
Правильно, и объект java.io.File является просто абстрактным представлением пути. Я декомпилировал и обновлял сторонние библиотеки за меньшие деньги, но вам должно сойти с рук запись файла с именем GUID в каталог tmp, а затем передача этого пути. - person Peter DeWeese; 14.09.2010
comment
Не совсем... у него также есть некоторые полезные функции для возврата URL-адреса или URI, которые можно использовать... См. мой ответ ниже. - person dty; 14.09.2010

Есть одна возможность, но это очень маловероятно.

Если API использует new FileReader(file) или new FileInputStream(file), то вы обделены, но...

Если он преобразует файл в URL или URI (используя toURL() или toURI()), то, поскольку File не является окончательным, вы можете передать подкласс File, в котором вы управляете построением URL/URI и, что более важно, обработчиком. .

Но шансов ОЧЕНЬ мало!

person dty    schedule 13.09.2010

Итак, я вижу, что есть принятый ответ (и он старый), но я нашел способ сделать это. Я использовал API IDOL On Demand, и мне нужно было преобразовать 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, который можно использовать позже в вашей программе.

person Wyetro    schedule 11.08.2015