Frage

Ich bin gerade dabei, einige Änderungen an einer Bibliothek vorzunehmen, die ich verwende. Um die Speichernutzung zu reduzieren, schreibt die Bibliothek ihre temporären Daten auf Festplatten, anstatt sie im Speicher zu halten. Für mein Nutzungsszenario ist es jedoch effizienter, es im Speicher zu halten. Es hat auch einige Probleme mit der Parallelität, da es ständige Namen für seine TEMP-Dateien enthält und daher nicht gleichzeitig in verschiedenen Threads ausgeführt werden kann (da die Threads die Daten des anderen beschädigen).

Ich muss daher die Bibliothek so ändern, dass sie stattdessen alle Daten im Speicher hält. Ich habe die Bibliothek ursprünglich nicht geschrieben und fühle mich daher nicht sehr wohl, drastische Änderungen am Code vorzunehmen. Ich würde dies daher gerne mit so wenig Refactoring wie möglich tun. Der Code, der auf die Festplatte schreibt, ist recht einfach. Hier ist ein (etwas vereinfachtes) Beispiel:

final FileChannel fileChannel = this.randomAccessFile.getChannel();
fileChannel.position(calculatePosition());
while (blockData.hasRemaining())
{
 fileChannel.write(blockData);
}

Das Lesen eines Blocks ist sehr ähnlich (dh es verwendet ein Filchannel, das er von einer zufälligen Access -Datei erhält).

Es fühlt sich an, als wäre die einfachste Lösung, wenn ich eine Implementierung von Filechannel verwenden kann, die an einen Ort im Speicher anstelle einer Datei ordnet. Ich weiß, dass ich eine Datei an einem Ort im Speicher mit dem Map-Methode von Filechannel zuordnen kann. Das ist jedoch umgekehrt. Das gibt mir ein "Speicher-api" für eine Datei. Ich möchte eine filechannel-Schnittstelle gegen einen Speicher. Gibt es verfügbare Implementierungen davon?

War es hilfreich?

Lösung

Java 7 ermöglicht Steckdateisysteme, sodass Sie ein speicherbasiertes Dateisystem verwenden und die aktuelle Filchannel -API beibehalten können. Kurz gesagt, Sie müssen wahrscheinlich die API, die Sie verwenden, in Commons-VFs ändern, wie Adrian vorschlägt oder nur Speicherstrukturen verwenden.

Andere Tipps

Vielleicht können Sie ein In-Memory-Dateisystem verwenden, wie z. Apache Commons VFS.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top