Frage

Bitte zeigen Sie mir die besten / schnelle Methoden für:

1) Laden sehr kleine binäre Dateien in dem Speicher. Zum Beispiel Symbole;

2) Laden / Lesen sehr große binäre Dateien der Größe 512 MB +. Vielleicht muss ich Memory-Mapped IO verwenden?

3) Ihre gemeinsame Wahl, wenn Sie nicht wollen, über Größe / Geschwindigkeit denken, sondern muss nur etwas tun: alle Bytes in dem Speicher

Danke !!!

P. S. Es tut uns vielleicht triviale Frage. Bitte schließen Sie nicht it;)

P.S.2. Spiegel analoger Frage für C #;

War es hilfreich?

Lösung

Für Memory-Mapped-Dateien, Java hat ein nio Paket: Memory Mapped Files

Überprüfen Sie heraus Byte-Stream-Klasse für kleine Dateien: Byte-Stream

Überprüfen Sie heraus gepufferte I / O für größere Dateien: Buffered-Stream

Andere Tipps

Der einfachste Weg, eine kleine Datei in dem Speicher zu lesen ist:

// Make a file object from the path name
File file=new File("mypath");
// Find the size
int size=file.length();
// Create a buffer big enough to hold the file
byte[] contents=new byte[size];
// Create an input stream from the file object
FileInputStream in=new FileInutStream(file);
// Read it all
in.read(contents);
// Close the file
in.close();

Im wirklichen Leben würden Sie einige try / catch-Blöcke bei I / O-Fehler müssen.

Wenn Sie eine große Datei lesen, würde ich dringend NICHT es auf einmal alle in den Speicher einzulesen vorschlagen, wenn es möglicherweise vermieden werden können. Lesen Sie es und verarbeiten es in Stücke schneiden. Es ist eine sehr seltene Anwendung, die wirklich eine 500MB-Datei im Speicher halten, muss alles auf einmal.

Es gibt nicht so etwas wie Memory-Mapped I / O in Java. Wenn das, was Sie tun müssen, dann würden Sie nur einen wirklich großen Byte-Array erstellen müssen.

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