Laden Sie große Dateien von HDFS herunter
Ich habe eine große Datei (etwa 2 GB) DataInputStream vom HDFS-Client bekommen und muss sie als Datei auf meinem Host speichern.
Ich überlege, Apache Common IOUtils zu verwenden und so etwas zu machen......
Ich habe nach anderen Lösungen gesucht, die besser sind als diese hier. Das Hauptanliegen ist die Verwendung von Pufferung in Input und IOUtils.copy.
Für Dateien größer als 2GB wird empfohlen, IOUtils.copyLarge() zu verwenden (wenn wir von denselben IOUtils sprechen: org.apache.commons.io.IOUtils)
Die Replik in IOUtils verwendet die Standardpuffergröße von 4Kb (obwohl man eine weitere Puffergröße als Parameter angeben kann).
Der Unterschied zwischen copy() und copyLarge() besteht darin, dass das Ergebnis zurückgegeben wird.
Denn copy(), wenn der Strom größer als 2 GB ist, wirst du die Kopie erfolgreich verwenden, aber das Ergebnis ist -1.
Für copyLarge() ist das Ergebnis die Anzahl der vollständig kopierten Bytes.
Mehr dazu in der Dokumentation finden Sie hier:
Der Hyperlink-Login ist sichtbar.
Wie man über die Spring Rest API überprüft, ob eine Datei vollständig heruntergeladen ist.
Ich habe eine einfache REST-API erstellt, um Dateien von hdfs bereitzustellen (die Dateien sind groß und ich möchte sie nicht lokal kopieren).
Ich möchte die Informationen dokumentieren, die der Download erfolgreich abgeschlossen hat, also den gesamten Stream lesen, aber ich weiß nicht wie. Ich kann nur die Informationen notieren, dass der Dateidownload begonnen hat.
Jede Hilfe wäre sehr willkommen.
Du kannst versuchen, einen Wrapper auf dem InputStream zu erstellen und einige Flags auf dem Stream close(close()) auszulösen.
Zum Beispiel können Sie ProxyInputStream als Grundlage verwenden:
|