Správa BLOBů v prezentaci v Javě pro efektivní využití paměti
Přehled
Aspose.Slides poskytuje zpracování BLOB pro velká binární data v prezentacích, aby pomohlo snížit spotřebu paměti při práci s velkými obrázky, audio, video a soubory prezentací.
Tento článek ukazuje, jak pomocí BLOB‑zpracování přidat velká média do prezentace, exportovat velká média z prezentace a načíst velké prezentace efektivněji. Také vysvětluje, jak mohou být během zpracování použity dočasné soubory a jak změnit složku, ve které jsou ukládány.
O BLOB
BLOB (Binary Large Object) je obvykle velká položka (foto, prezentace, dokument nebo média) uložená v binárním formátu.
Aspose.Slides for Java vám umožňuje používat BLOBy pro objekty způsobem, který snižuje spotřebu paměti, když jsou zapojeny velké soubory.
Info
Aby se obešlo několik omezení při práci se streamy, Aspose.Slides může zkopírovat obsah streamu. Načtení velké prezentace přes její stream způsobí kopírování obsahu prezentace a zpomalí načítání. Proto, když chcete načíst velkou prezentaci, důrazně doporučujeme použít cestu k souboru prezentace, nikoli její stream.Použití BLOB ke snížení spotřeby paměti
Přidání velkého souboru pomocí BLOB do prezentace
Aspose.Slides for Java vám umožňuje přidávat velké soubory (v tomto případě velký video soubor) pomocí procesu zahrnujícího BLOBy, aby se snížila spotřeba paměti.
Tento Java kód vám ukáže, jak přidat velký video soubor pomocí BLOB procesu do prezentace:
String pathToVeryLargeVideo = "veryLargeVideo.avi";
// Vytvoří novou prezentaci, ke které bude video přidáno
Presentation pres = new Presentation();
try {
FileInputStream fileStream = new FileInputStream(pathToVeryLargeVideo);
try {
// Přidáme video do prezentace – zvolili jsme chování KeepLocked, protože
//neplánujeme přistupovat k souboru "veryLargeVideo.avi" file.
IVideo video = pres.getVideos().addVideo(fileStream, LoadingStreamBehavior.KeepLocked);
pres.getSlides().get_Item(0).getShapes().addVideoFrame(0, 0, 480, 270, video);
// Uloží prezentaci. I když se výstupem stane velká prezentace, spotřeba paměti
//zůstává nízká během životního cyklu objektu pres
pres.save("presentationWithLargeVideo.pptx", SaveFormat.Pptx);
} finally {
if (fileStream != null) fileStream.close();
}
} catch(IOException e) {
} finally {
if (pres != null) pres.dispose();
}
Export velkého souboru pomocí BLOB z prezentace
Aspose.Slides for Java vám umožňuje exportovat velké soubory (např. audio nebo video soubor) pomocí procesu zahrnujícího BLOBy z prezentací. Například můžete potřebovat extrahovat velký mediální soubor z prezentace, ale nechcete, aby byl soubor načten do paměti počítače. Exportem souboru přes BLOB proces udržíte spotřebu paměti nízkou.
Tento Java kód demonstruje popsanou operaci:
String hugePresentationWithAudiosAndVideosFile = "LargeVideoFileTest.pptx";
LoadOptions loadOptions = new LoadOptions();
// Uzamkne zdrojový soubor a NENAČTE ho do paměti
loadOptions.getBlobManagementOptions().setPresentationLockingBehavior(PresentationLockingBehavior.KeepLocked);
// vytvoří instanci Presentation a uzamkne soubor "hugePresentationWithAudiosAndVideos.pptx".
Presentation pres = new Presentation(hugePresentationWithAudiosAndVideosFile, loadOptions);
try {
// Uložíme každé video do souboru. Abychom zabránili vysoké spotřebě paměti, potřebujeme buffer, který bude použit
// k přenosu dat z video streamu prezentace do streamu nově vytvořeného video souboru.
byte[] buffer = new byte[8 * 1024];
// Iterates through the videos
for (int index = 0; index < pres.getVideos().size(); index++) {
IVideo video = pres.getVideos().get_Item(index);
// Otevře video stream prezentace. Všimněte si, že jsme úmyslně nevyužili přístup k vlastnostem
// jako video.BinaryData - protože tato vlastnost vrací pole byte obsahující celé video, což pak
// způsobí načtení bytů do paměti. Používáme video.GetStream, který vrátí Stream - a NENÍ
// potřeba načíst celé video do paměti.
InputStream presVideoStream = video.getStream();
try {
OutputStream outputFileStream = new FileOutputStream("video" + index + ".avi");
try {
int bytesRead;
while ((bytesRead = presVideoStream.read(buffer, 0, buffer.length)) > 0) {
outputFileStream.write(buffer, 0, bytesRead);
}
} finally {
outputFileStream.close();
}
} finally {
presVideoStream.close();
}
// Spotřeba paměti zůstane nízká bez ohledu na velikost videa nebo prezentace.
}
// V případě potřeby můžete použít stejný postup i pro audio soubory.
} catch (IOException e) {
} finally {
pres.dispose();
}
Přidání obrázku jako BLOB do prezentace
Pomocí metod rozhraní IImageCollection a třídy ImageCollection můžete přidat velký obrázek jako stream, aby byl zpracován jako BLOB.
Tento Java kód vám ukáže, jak přidat velký obrázek pomocí BLOB procesu:
String pathToLargeImage = "large_image.jpg";
// vytvoří novou prezentaci, ke které bude obrázek přidán.
Presentation pres = new Presentation();
try {
FileInputStream fileStream = new FileInputStream(pathToLargeImage);
try {
// Přidáme obrázek do prezentace – zvolíme chování KeepLocked, protože
// NEPLÁNUJEME přistupovat k souboru "largeImage.png".
IPPImage img = pres.getImages().addImage(fileStream, LoadingStreamBehavior.KeepLocked);
pres.getSlides().get_Item(0).getShapes().addPictureFrame(ShapeType.Rectangle, 0, 0, 300, 200, img);
// Uloží prezentaci. I když se výstupem stane velká prezentace, spotřeba paměti
// zůstává nízká během životního cyklu objektu pres
pres.save("presentationWithLargeImage.pptx", SaveFormat.Pptx);
} finally {
if (fileStream != null) fileStream.close();
}
} catch(IOException e) {
} finally {
if (pres != null) pres.dispose();
}
Paměť a velké prezentace
Obvykle při načítání velké prezentace vyžadují počítače hodně dočasné paměti. Veškerý obsah prezentace se načte do paměti a soubor (ze kterého byla prezentace načtena) přestane být používán.
Uvažujme velkou PowerPoint prezentaci (large.pptx), která obsahuje 1,5 GB video soubor. Standardní metoda načtení prezentace je popsána v tomto Java kódu:
Presentation pres = new Presentation("large.pptx");
try {
pres.save("large.pdf", SaveFormat.Pdf);
} finally {
if (pres != null) pres.dispose();
}
Tato metoda ale spotřebuje přibližně 1,6 GB dočasné paměti.
Načtení velké prezentace jako BLOB
Pomocí procesu zahrnujícího BLOB můžete načíst velkou prezentaci při minimální spotřebě paměti. Tento Java kód popisuje implementaci, kde je BLOB proces použit k načtení velkého souboru prezentace (large.pptx):
LoadOptions loadOptions = new LoadOptions();
loadOptions.getBlobManagementOptions().setPresentationLockingBehavior(PresentationLockingBehavior.KeepLocked);
loadOptions.getBlobManagementOptions().setTemporaryFilesAllowed(true);
Presentation pres = new Presentation("large.pptx", loadOptions);
try {
pres.save("large.pdf", SaveFormat.Pdf);
} finally {
if (pres != null) pres.dispose();
}
Změna složky pro dočasné soubory
Když je použit BLOB proces, počítač vytváří dočasné soubory ve výchozí složce pro dočasné soubory. Pokud chcete, aby byly dočasné soubory uloženy v jiné složce, můžete změnit nastavení úložiště pomocí TempFilesRootPath:
LoadOptions loadOptions = new LoadOptions();
loadOptions.getBlobManagementOptions().setPresentationLockingBehavior(PresentationLockingBehavior.KeepLocked);
loadOptions.getBlobManagementOptions().setTemporaryFilesAllowed(true);
loadOptions.getBlobManagementOptions().setTempFilesRootPath("temp");
Info
Když použijeteTempFilesRootPath, Aspose.Slides automaticky nevytvoří složku pro ukládání dočasných souborů. Musíte složku vytvořit ručně.
Uvolnění objektů prezentace pro uvolnění paměti
Při zpracování velkých prezentací zajistěte, aby byla instance Presentation řádně uvolněna, aby se uvolnila paměť, kterou zabírala. Po dokončení práce s prezentací zavolejte dispose(), abyste uvolnili neřízené zdroje.
Presentation presentation = new Presentation("large.pptx");
// ...zpracujte prezentaci...
presentation.save("large.pdf", SaveFormat.Pdf);
// Explicitně uvolněte prostředky.
presentation.dispose();
FAQ
Jaká data v prezentaci Aspose.Slides jsou považována za BLOB a řízena možnostmi BLOB?
Velké binární objekty, jako jsou obrázky, audio a video, jsou považovány za BLOB. Celý soubor prezentace také zahrnuje BLOB zpracování při načítání nebo ukládání. Tyto objekty jsou řízeny BLOB politikami, které vám umožňují spravovat využití paměti a přepínat na dočasné soubory podle potřeby.
Kde mohu konfigurovat pravidla BLOB zpracování během načítání prezentace?
Použijte LoadOptions s BlobManagementOptions. Zde nastavíte limit paměti pro BLOB, povolíte nebo zakážete dočasné soubory, zvolíte kořenovou cestu pro dočasné soubory a určíte chování zamykání zdroje.
Ovlivňují nastavení BLOB výkon a jak vybalancovat rychlost vůči paměti?
Ano. Udržení BLOB v paměti maximalizuje rychlost, ale zvyšuje spotřebu RAM; snížení limitu paměti přesouvá více práce do dočasných souborů, čímž snižuje RAM za cenu vyššího vstupně‑výstupního provozu. Použijte metodu setMaxBlobsBytesInMemory k dosažení správné rovnováhy pro vaše zatížení a prostředí.
Pomáhají BLOB možnosti při otevírání extrémně velkých prezentací (např. gigabajty)?
Ano. BlobManagementOptions jsou navrženy pro takové scénáře: povolení dočasných souborů a použití zamykání zdroje může výrazně snížit špičkovou spotřebu RAM a stabilizovat zpracování velmi velkých sad.
Mohu použít BLOB politiky při načítání ze streamů místo souborů na disku?
Ano. stejná pravidla platí i pro streamy: instance prezentace může vlastnit a zamknout vstupní stream (v závislosti na zvoleném režimu zamykání) a dočasné soubory jsou používány, pokud jsou povoleny, čímž se během zpracování udržuje předvídatelná spotřeba paměti.