2014-11-21 2 views
2

Короче: Я хочу бросить байтовый массив или строку в объект File, так что я могу использовать этот объект File в качестве параметра для метод, подпись которого я не могу изменить. Я хочу достичь этого в памяти, не касаясь диска.Java - Литая байтовый массив или строку в (виртуальный) Файл

Я читал много similar questions здесь, включая предложения об использовании File.createTempFile, но у меня создается впечатление, что мы по-прежнему создаем физические файлы, даже если это временно?

В полном объеме: Я помогаю в очень сложном проекте восстановления данных. Теперь у нас есть, скажем, образ диска объемом более 400 ГБ, который представляет собой сборник из 2 Мбайт-секций. Некоторые из файлов, которые я хочу восстановить, начинаются в одном и заканчиваются в другом разделе размером 2 МБ. У нас есть инвентарь того, где мы видели начало и конец, поэтому теперь я хочу сшить начала и окончания вместе, а затем проверить, является ли результат допустимым файлом, в каком-то проректорном формате. (это все справочная информация, давайте не будем в этом разбираться!)

У меня есть класс java (который я не могу изменить), который может читать и, следовательно, проверять эти файлы. Поэтому я хочу просто передать мой файл-пул в этот метод. Если это будет успешным, я перейду к следующей «начальной части», иначе я попытаюсь сопоставить начальную часть с другой конечной частью.

Я хочу сохранить «сшитые файлы» в памяти (не записывать его во временные файлы), потому что, вероятно, ясно, что мне нужна высокая эффективность. Это последнее средство; действительно, нам нужно соответствовать многим тысячам начинаний со многими тысячами окончаний. Но опять же, давайте просто держать на вопрос :)

+4

Символ 'java.io.File' представляет только путь и имя файла, а не фактическое содержание самого файла. – Jesper

+3

Если ваш API использует 'java.io.File', единственный простой способ, которым я могу думать, - использовать RAM-привод ... –

+0

Хм, я полагаю, мне действительно понадобится RAM-накопитель ... звучит так, как будто быть другим способом, если File может только указывать на «фактический файл». Благодаря! – Sygmoral

ответ

1

Если ваш класс Java принимает File, который, пути к файлам в файловой системе, то да, вы должны создать файл в файловой системе, а затем кормить Java-класс с файловым путем. Вы можете ускорить работу, создав файл в RAM-диске, но тем не менее это файл. Если класс также принимает InputStream (хорошо разработанные классы делают), то вы можете использовать ByteArrayInputStream. Другой возможный интерфейс класса принимать входные данные Java NIO машины с ReadableByteChannel является аналогом NIO для абстрактного java.io.InputStream

Смежные вопросы