временные файлы в памяти в программе Java - PullRequest
2 голосов
/ 16 февраля 2011

Есть ли способ заставить временные файлы, созданные в Java-программе, в памяти?Поскольку я использую несколько больших XML-файлов, у меня будут преимущества в этом отношении?Должен ли я использовать прозрачный метод, который позволяет мне не расстраивать существующее приложение.

ОБНОВЛЕНИЕ: я смотрю на исходный код и заметил, что он использует библиотеки (я не могу изменить), который требует путьэти файлы ...

Спасибо

Ответы [ 5 ]

3 голосов
/ 16 февраля 2011

Единственный способ, которым я могу придумать, - это создать RAM-диск и затем указать системное свойство java.io.tmpdir на этот RAM-диск.

2 голосов
/ 16 февраля 2011

Не используйте файлы, если вам не нужно.Рассмотрим com.google.common.io.FileBackedOutputStream из Гуавы:

OutputStream, который начинает буферизацию в байтовый массив, но переключается на буферизацию файла, когда данные достигают настраиваемого размера.

2 голосов
/ 16 февраля 2011

XML - это просто String, почему бы просто не ссылаться на Strings в памяти, я думаю, что интерфейс Файла отвлекает. Используйте StringBuilder, если вам нужно манипулировать данными. Используйте StringBuffer, если вам нужна безопасность потока. Поместите их в тип сейфа Map, если у вас есть переменное число вещей, которые нужно найти ключом.

Если вам абсолютно необходимо сохранить интерфейс File, то создайте InMemoryFileWriter, который обертывает ByteArrayOutputStream и ByteArrayInputStream, чтобы сохранить их в памяти, но опять же я думаю, что вся вещь File в памяти - это плохое решение, если вы просто хотите кешировать вещи в памяти, это слишком много, когда простой String сделает.

0 голосов
/ 16 февраля 2011

Предполагая, что у вас есть контроль над потоками, которые используются для записи в файл -

Вы абсолютно хотите поведение в памяти? Если все, что вы хотите сделать, это уменьшить количество системных вызовов для записи на диск, вы можете обернуть FileOutputStream в BufferedOutputStream (с соответствующим большим размером буфера) и записать в этот BufferedOutputStream (или BufferedWriter ) вместо прямой записи в исходный FileOutputStream.
(Это требует изменения в существующем приложении)

0 голосов
/ 16 февраля 2011

Вы, вероятно, можете заставить поведение по умолчанию java.io.File с некоторой магией отражения, но я уверен, что вы не хотите этого делать, поскольку это может привести к непредсказуемому поведению.Вам лучше предоставить механизм, в котором можно было бы переключаться между обычным поведением и поведением в памяти, и маршрутизировать все вызовы через этот механизм.как использовать файловый API для создания файлов в памяти.

...