Töltsd le nagy fájlokat a HDFS-ről
A HDFS kliensből kaptam egy nagy fájlt (kb. 2GB) DataInputStream-ből, és fájlként kell tárolnom a hostomon.
Azon gondolkodom, hogy Apache Common IOUtils rendszereket használok, és csinálok valami hasonlót......
Más megoldásokat keresek, amelyek jobbak ennél. A fő aggodalom a pufferezés használata a bemenetben és az IOUtils.copy esetében.
2 GB-nál nagyobb fájlok esetén ajánlott az IOUtils.copyLarge() használatát (ha ugyanazokról az IOUtilsekről beszélünk: org.apache.commons.io.IOUtils)
Az IOUtils replikája alapértelmezett 4Kb pufferméretet használ (bár paraméterként más pufferméretet is megadhatunk).
A copy() és a copyLarge() közötti különbség az, hogy visszaadja az eredményt.
Mivel a copy(), ha a stream nagyobb, mint 2GB, sikeresen használod a másolatot, de az eredmény -1.
A copyLarge() esetén az eredmény a teljes egészében másolt bájtok száma.
További információkat itt találhat:
A hiperlink bejelentkezés látható.
Hogyan ellenőrizzük, hogy egy fájl teljesen le van töltve a Spring Rest API-n keresztül
Létrehoztam egy egyszerű REST API-t, hogy fájlokat szolgáljak HDFS-ből (a fájlok nagyok, és nem szeretném helyben másolni őket).
Szeretném naplózni az információt, hogy a fájlletöltés sikeresen véget ért, azaz elolvassam az egész streamet, de nem tudom, hogyan. Csak azt az információt tudom rögzíteni, hogy a fájlletöltés elkezdődött.
Bármilyen segítséget nagyon hálás lennék.
Megpróbálhatsz wrappert létrehozni az InputStreamen, és aktiválni néhány zászlót a stream(close()) sávon.
Például a ProxyInputStream-et használhatod alapként:
|