Was ist der einfachste Weg, eine benutzerdefinierte Datei Implementierung zu haben, die nur Speicher in Java verwendet

StackOverflow https://stackoverflow.com/questions/804814

  •  03-07-2019
  •  | 
  •  

Frage

Ich habe eine Codebasis, die umfangreiche Verwendung von Dateien macht ein einzelnes Datenobjekt zu repräsentieren. Ich habe den Code Refactoring, so dass das Datenobjekt Objekt nun ein explizite Java ist die meist die Interaktion mit dem zugrunde liegenden Dateisystem versteckt. Allerdings verwenden wir ein paar externen Tools (wie Weka), das Lesen und Schreiben von Dateien.

Idealerweise mag ich eine Unterklasse von Datei haben, die ich auf diese anderen Bibliotheken passieren kann, die von einem im Speicher befindlichen Byte-Array unterstützt wird - entweder zum Lesen oder Schreiben.

Meine Google-Suchen aufgedreht Memory-Mapped-Dateien, aber das ist nicht das Problem, das ich habe, wie ich will keine aktuelle Datei auf dem Dateisystem. Gibt es Lösungen bereits da draußen, oder sollte ich mich nur Unterklasse Datei und über fahren alle Methoden, die auf dem realen Dateisystem beziehen?

War es hilfreich?

Lösung

Dies ist in der Regel, warum Sie nie Methoden schreiben sollen eine Datei zu nehmen, wenn es wirklich notwendig ist. Sie Ihre Bibliotheken diese Methoden nicht zur Verfügung stellen, die eine beliebige Input nehmen? In diesem Fall ist es trivial, eine ByteArrayInputStream oder einen Eingabestrom zu übergeben, die aus dem Speicher liest.

Das Problem mit übergeordneter Datei ist es unwahrscheinlich, dass Sie es in einer Art und Weise außer Kraft setzen können, die Ihnen helfen. Wenn zum Beispiel der Bibliothek mit einem Fileinputstream öffnet, dann, wenn der Bytes kommt an diesem Punkt wirklich von der Fileinputstream Implementierung nicht von der Datei gesteuert wird.

Andere Tipps

java.io.File ist im Wesentlichen ein Wrapper um eine String, die einen Dateipfad darstellen (es sollte eine final Klasse gewesen sein, aber es gehen Sie). So sind Sie kein Glück mit diesem Ansatz. Sie können natürlich, erstellen temporäre Dateien und Dateien auf „RAM-Discs“.

Sie sollten lieber Ausschau nach In-Memory-Implementierung von OutputStreams / Inputstreams wie ByteArrayOutputStream mit seiner toByteArray () -Methode oder die ByteArrayInputStream mit dem byte [] Konstruktor. wenn Ihre Daten komplexer dargestellt wird, können Sie die Schnittstelle direkt implementieren.

Sie haben, um herauszufinden, was Datei Methoden von Ihrer dritten Partei verwendet werden und bieten die benutzerdefinierte Implementierung für sie.

ist fast sicher, dass Sie nicht in der Lage sein, um erfolgreich zu sein, weil das java.io.File Objekt nicht verantwortlich für die Lesen / Schreiben des Dateiinhaltes ist.

Der beste Ansatz wäre, den Code Refactoring, so dass es auf dem File-Objekt, sondern in dem Byte-Array hängt nicht von dieser Datei zurückgegeben.

Erstellen einer Unterklasse der Datei ist möglich.

public class InMemoryFile extends File { 
    public InMemody() { 
         super( "/dev/null" );
    }
    // find out what methods should be overwritten ?????
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top