Java - Прехвърляне на байтов масив или низ към (виртуален) файл

Накратко: Искам да прехвърлям масив от байтове или String във File обект, така че да мога да използвам този File обект като параметър за метод, чийто подпис не мога промяна. Искам да постигна това в паметта, без изобщо да докосвам устройство.

Прочетох много подобни въпроси тук, включително предложения за използване на File. createTempFile, но имам впечатлението, че все още създаваме физически файлове, дори и да е само временно?

Изцяло: Помагам с много сложен проект за възстановяване на данни. Сега имаме, да кажем, дисково изображение от над 400GB, което е колекция от 2MB-секции. Някои от файловете, които искам да възстановя, започват в един и завършват в друг 2MB раздел. Имаме опис на това къде сме виждали начало и край, така че сега искам да свържа заедно начало и край и след това да проверя дали резултатът е валиден файл в някакъв собствен формат. (това е цялата основна информация, нека не навлизаме в това!)

Имам Java клас (който не мога да променя), който може да чете и следователно да проверява тези файлове. Така че искам просто да заредя моя сборен файл в този метод. Ако е успешно, преминавам към следващата "начална част", в противен случай се опитвам да съпоставя началната част с различна крайна част.

Искам да запазя „сглобените файлове“ в паметта (да не ги записвам във временни файлове), защото вероятно е ясно, че имам нужда от висока ефективност. Това е крайна мярка; наистина трябва да съпоставим много хиляди начала с много хиляди краища. Но пак да се придържаме към въпроса :)


person Sygmoral    schedule 21.11.2014    source източник
comment
java.io.File представлява само път и име на файл, а не действителното съдържание на самия файл.   -  person Jesper    schedule 21.11.2014
comment
Ако вашият API приема java.io.File, единственият лесен начин, за който се сещам, е да използвате RAM устройство...   -  person Jon Skeet    schedule 21.11.2014
comment
Хм, предполагам, че наистина ще имам нужда от RAM устройство... изглежда, че няма да има друг начин, ако файлът може да сочи само към „действителен файл“. Благодаря!   -  person Sygmoral    schedule 21.11.2014
comment
Каква операционна система е това?   -  person chiastic-security    schedule 21.11.2014
comment
Пиша програмата на Windows 7. Нямам лесен достъп до друга платформа, на която да работя... но виждам, че има много безплатни помощни програми за създаване на RAM устройство и на Windows.   -  person Sygmoral    schedule 21.11.2014
comment
ДОБРЕ. Питах, защото на Linux вероятно ще имате ram диск вече под формата на /tmp. На много системи това е подкрепено от ram.   -  person chiastic-security    schedule 21.11.2014
comment
Искам да прехвърля байтов масив или низ във файл обект. Не се изчислява.   -  person Hot Licks    schedule 21.11.2014


Отговори (1)


Ако вашият Java клас приема Файл, т.е. пътища на файлове във файлова система, тогава да, трябва да създадете файл във файлова система и след това да захраните Java класа с пътя на файла. Можете да ускорите нещата, като създадете файла в RAM устройството, но въпреки това това е файл. Ако класът приема и InputStream (добре проектиран класове), тогава можете да използвате ByteArrayInputStream . Друг възможен интерфейс на класа за приемане на входни данни е Java NIO машина с ReadableByteChannel като NIO аналог за абстрактно java.io.InputStream

person user3159253    schedule 21.11.2014