Διαχείριση BLOB Παρουσιάσεων σε Java για Αποτελεσματική Χρήση Μνήμης

Επισκόπηση

Το Aspose.Slides παρέχει διαχείριση βάσει BLOB για μεγάλα δυαδικά δεδομένα σε παρουσιάσεις, βοηθώντας στη μείωση της κατανάλωσης μνήμης όταν εργάζεστε με μεγάλες εικόνες, ήχο, βίντεο και αρχεία παρουσιάσεων.

Αυτό το άρθρο δείχνει πώς να χρησιμοποιήσετε την επεξεργασία βάσει BLOB για να προσθέσετε μεγάλα μέσα σε μια παρουσίαση, να εξάγετε μεγάλα μέσα από μια παρουσίαση και να φορτώσετε μεγάλες παρουσιάσεις πιο αποδοτικά. Εξηγεί επίσης πώς μπορούν να χρησιμοποιηθούν προσωρινά αρχεία κατά την επεξεργασία και πώς να αλλάξετε το φάκελο που χρησιμοποιείται για την αποθήκευσή τους.

Σχετικά με το BLOB

BLOB (Binary Large Object) είναι συνήθως ένα μεγάλο αντικείμενο (φωτογραφία, παρουσίαση, έγγραφο ή μέσο) αποθηκευμένο σε δυαδικές μορφές.

Το Aspose.Slides for Java σας επιτρέπει να χρησιμοποιείτε BLOBs για αντικείμενα με τρόπο που μειώνει την κατανάλωση μνήμης όταν εμπλέκονται μεγάλα αρχεία.

Χρήση BLOB για Μείωση Κατανάλωσης Μνήμης

Προσθήκη Μεγάλου Αρχείου μέσω BLOB σε Παρουσίαση

Aspose.Slides for Java σας επιτρέπει να προσθέσετε μεγάλα αρχεία (στην περίπτωση αυτή, ένα μεγάλο αρχείο βίντεο) μέσω μιας διαδικασίας που περιλαμβάνει BLOBs για μείωση της κατανάλωσης μνήμης.

Αυτό το παράδειγμα Java δείχνει πώς να προσθέσετε ένα μεγάλο αρχείο βίντεο μέσω της διαδικασίας BLOB σε μια παρουσίαση:

String pathToVeryLargeVideo = "veryLargeVideo.avi";

 // Δημιουργεί μια νέα παρουσίαση στην οποία θα προστεθεί το βίντεο
Presentation pres = new Presentation();
try {
    FileInputStream fileStream = new FileInputStream(pathToVeryLargeVideo);
    try {
        // Ας προσθέσουμε το βίντεο στην παρουσίαση - επιλέξαμε τη συμπεριφορά KeepLocked επειδή
        // δεν προτίθεμεναι να προσπελάσουμε το αρχείο "veryLargeVideo.avi".
        IVideo video = pres.getVideos().addVideo(fileStream, LoadingStreamBehavior.KeepLocked);
        pres.getSlides().get_Item(0).getShapes().addVideoFrame(0, 0, 480, 270, video);

        // Αποθηκεύει την παρουσίαση. Καθώς μια μεγάλη παρουσίαση εξάγεται,
        // η χρήση μνήμης παραμένει χαμηλή κατά τη διάρκεια ζωής του αντικειμένου pres 
        pres.save("presentationWithLargeVideo.pptx", SaveFormat.Pptx);
    } finally {
        if (fileStream != null) fileStream.close();
    }
} catch(IOException e) {
} finally {
    if (pres != null) pres.dispose();
}

Εξαγωγή Μεγάλου Αρχείου μέσω BLOB από Παρουσίαση

Το Aspose.Slides for Java σας επιτρέπει να εξάγετε μεγάλα αρχεία (συγκεκριμένα, ένα αρχείο ήχου ή βίντεο) μέσω μιας διαδικασίας που περιλαμβάνει BLOBs από παρουσιάσεις. Για παράδειγμα, ίσως χρειαστεί να εξάγετε ένα μεγάλο αρχείο μέσων από μια παρουσίαση αλλά δεν θέλετε το αρχείο να φορτωθεί στη μνήμη του υπολογιστή σας. Εξάγοντας το αρχείο μέσω της διαδικασίας BLOB, διατηρείτε τη χρήση μνήμης χαμηλή.

Αυτός ο κώδικας σε Java δείχνει τη περιγραφόμενη λειτουργία:

String hugePresentationWithAudiosAndVideosFile = "LargeVideoFileTest.pptx";

LoadOptions loadOptions = new LoadOptions();
// Κλειδώνει το αρχείο πηγής και ΔΕΝ το φορτώνει στη μνήμη
loadOptions.getBlobManagementOptions().setPresentationLockingBehavior(PresentationLockingBehavior.KeepLocked);

// Δημιουργεί το στιγμιότυπο του Presentation και κλειδώνει το αρχείο "hugePresentationWithAudiosAndVideos.pptx".
Presentation pres = new Presentation(hugePresentationWithAudiosAndVideosFile, loadOptions);
try {
    // Ας αποθηκεύσουμε κάθε βίντεο σε αρχείο. Για να αποτρέψουμε υψηλή χρήση μνήμης, χρειαζόμαστε ένα buffer που θα χρησιμοποιηθεί
    // για τη μεταφορά των δεδομένων από τη ροή βίντεο της παρουσίασης σε ροή ενός νεοδημιουργημένου αρχείου βίντεο.
    byte[] buffer = new byte[8 * 1024];

    // Επανάληψη μέσω των βίντεο
    for (int index = 0; index < pres.getVideos().size(); index++) {
        IVideo video = pres.getVideos().get_Item(index);

        // Ανοίγει τη ροή βίντεο της παρουσίασης. Παρακαλώ σημειώστε ότι αποφεύγουμε σκόπιμα την πρόσβαση σε ιδιότητες
        // όπως video.BinaryData - επειδή αυτή η ιδιότητα επιστρέφει έναν πίνακα byte που περιέχει ολόκληρο το βίντεο, το οποίο στη συνέχεια
        // φορτώνει byte στη μνήμη. Χρησιμοποιούμε το video.GetStream, το οποίο επιστρέφει Stream - και ΔΕΝ
        //  απαιτεί να φορτώσουμε ολόκληρο το βίντεο στη μνήμη.
        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();
        }
        // Η κατανάλωση μνήμης θα παραμείνει χαμηλή ανεξαρτήτως του μεγέθους του βίντεο ή της παρουσίασης.
    }
    // Αν χρειαστεί, μπορείτε να εφαρμόσετε τα ίδια βήματα για αρχεία ήχου. 
} catch (IOException e) {
} finally {
    pres.dispose();
}

Προσθήκη Εικόνας ως BLOB σε Παρουσίαση

Με τις μεθόδους από τη διεπαφή IImageCollection και την κλάση ImageCollection, μπορείτε να προσθέσετε μια μεγάλη εικόνα ως ροή ώστε να θεωρηθεί BLOB.

Αυτός ο κώδικας Java δείχνει πώς να προσθέσετε μια μεγάλη εικόνα μέσω της διαδικασίας BLOB:

String pathToLargeImage = "large_image.jpg";

// δημιουργεί μια νέα παρουσίαση στην οποία θα προστεθεί η εικόνα.
Presentation pres = new Presentation();
try {
	FileInputStream fileStream = new FileInputStream(pathToLargeImage);
	try {
		// Ας προσθέσουμε την εικόνα στην παρουσίαση - επιλέγουμε τη συμπεριφορά KeepLocked επειδή
		// ΔΕΝ προτίθεμαι να προσπελάσω το αρχείο "largeImage.png" file.
		IPPImage img = pres.getImages().addImage(fileStream, LoadingStreamBehavior.KeepLocked);
		pres.getSlides().get_Item(0).getShapes().addPictureFrame(ShapeType.Rectangle, 0, 0, 300, 200, img);

		// Αποθηκεύει την παρουσίαση. Καθώς μια μεγάλη παρουσίαση εξάγεται, η κατανάλωση μνήμης
		// παραμένει χαμηλή καθ' όλη τη διάρκεια ζωής του αντικειμένου pres
		pres.save("presentationWithLargeImage.pptx", SaveFormat.Pptx);
	} finally {
		if (fileStream != null) fileStream.close();
	}
} catch(IOException e) {
} finally {
	if (pres != null) pres.dispose();
}

Μνήμη και Μεγάλες Παρουσιάσεις

Κανονικά, για τη φόρτωση μιας μεγάλης παρουσίασης, οι υπολογιστές απαιτούν πολύ προσωρινή μνήμη. Ολόκληρο το περιεχόμενο της παρουσίασης φορτώνεται στη μνήμη και το αρχείο (από το οποίο φορτώθηκε η παρουσίαση) δεν χρησιμοποιείται πλέον.

Σκεφτείτε μια μεγάλη παρουσίαση PowerPoint (large.pptx) που περιέχει αρχείο βίντεο 1,5 GB. Η τυπική μέθοδος φόρτωσης της παρουσίασης περιγράφεται στον παρακάτω κώδικα Java:

Presentation pres = new Presentation("large.pptx");
try {
    pres.save("large.pdf", SaveFormat.Pdf);
} finally {
    if (pres != null) pres.dispose();
}

Αλλά αυτή η μέθοδος καταναλώνει περίπου 1,6 GB προσωρινής μνήμης.

Φόρτωση Μεγάλης Παρουσίασης ως BLOB

Μέσω της διαδικασίας που περιλαμβάνει BLOB, μπορείτε να φορτώσετε μια μεγάλη παρουσίαση χρησιμοποιώντας λίγη μνήμη. Αυτός ο κώδικας Java περιγράφει την υλοποίηση όπου η διαδικασία BLOB χρησιμοποιείται για τη φόρτωση ενός μεγάλου αρχείου παρουσίασης (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();
}

Αλλαγή Φακέλου για Προσωρινά Αρχεία

Όταν χρησιμοποιείται η διαδικασία BLOB, ο υπολογιστής σας δημιουργεί προσωρινά αρχεία στον προεπιλεγμένο φάκελο για προσωρινά αρχεία. Εάν θέλετε τα προσωρινά αρχεία να διατηρηθούν σε διαφορετικό φάκελο, μπορείτε να αλλάξετε τις ρυθμίσεις αποθήκευσης χρησιμοποιώντας TempFilesRootPath:

LoadOptions loadOptions = new LoadOptions();
loadOptions.getBlobManagementOptions().setPresentationLockingBehavior(PresentationLockingBehavior.KeepLocked);
loadOptions.getBlobManagementOptions().setTemporaryFilesAllowed(true);
loadOptions.getBlobManagementOptions().setTempFilesRootPath("temp");

Αποδέσμευση Αντικειμένων Παρουσίασης για Απελευθέρωση Μνήμης

Κατά την επεξεργασία μεγάλων παρουσιάσεων, βεβαιωθείτε ότι το αντικείμενο Presentation έχει αποδεσμευθεί σωστά ώστε η μνήμη που κατείχε να απελευθερωθεί. Καλέστε dispose() αφού ολοκληρώσετε τη χρήση της παρουσίασης για να ελευθερώσετε μη διαχειριζόμενους πόρους.

Presentation presentation = new Presentation("large.pptx");

// ...επεξεργαστείτε την παρουσίαση...
presentation.save("large.pdf", SaveFormat.Pdf);

// Απελευθερώστε ρητά τους πόρους.
presentation.dispose();

Συχνές Ερωτήσεις

Ποια δεδομένα σε μια παρουσίαση Aspose.Slides αντιμετωπίζονται ως BLOB και ελέγχονται από τις επιλογές BLOB;

Τα μεγάλα δυαδικά αντικείμενα όπως εικόνες, ήχος και βίντεο αντιμετωπίζονται ως BLOB. Ολόκληρο το αρχείο παρουσίασης επίσης εμπλέκεται στην διαχείριση BLOB όταν φορτώνεται ή αποθηκεύεται. Αυτά τα αντικείμενα διέπονται από πολιτικές BLOB που σας επιτρέπουν να διαχειρίζεστε τη χρήση μνήμης και να καταφεύγετε σε προσωρινά αρχεία όταν χρειάζεται.

Πού μπορώ να ρυθμίσω τους κανόνες διαχείρισης BLOB κατά τη φόρτωση παρουσίασης;

Χρησιμοποιήστε το LoadOptions μαζί με το BlobManagementOptions. Εκεί ορίζετε το όριο μνήμης για BLOB, επιτρέπετε ή απαγορεύετε τα προσωρινά αρχεία, επιλέγετε τη ρίζα διαδρομή για τα προσωρινά αρχεία και ορίζετε τη συμπεριφορά κλειδώματος της πηγής.

Επηρεάζουν οι ρυθμίσεις BLOB την απόδοση, και πώς μπορώ να ισορροπήσω την ταχύτητα με τη μνήμη;

Ναι. Η διατήρηση των BLOB στη μνήμη μεγιστοποιεί την ταχύτητα αλλά αυξάνει την κατανάλωση RAM· η μείωση του ορίου μνήμης μεταφέρει περισσότερη εργασία σε προσωρινά αρχεία, μειώνοντας τη RAM με κόστος επιπλέον I/O. Χρησιμοποιήστε τη μέθοδο setMaxBlobsBytesInMemory για να επιτύχετε τη σωστή ισορροπία για το φορτίο εργασίας και το περιβάλλον σας.

Βοηθούν οι επιλογές BLOB κατά το άνοιγμα εξαιρετικά μεγάλων παρουσιάσεων (π.χ. gigabytes);

Ναι. Τα BlobManagementOptions έχουν σχεδιαστεί για τέτοια σενάρια: η ενεργοποίηση των προσωρινών αρχείων και η χρήση κλειδώματος πηγής μπορούν να μειώσουν σημαντικά τη μέγιστη χρήση RAM και να σταθεροποιήσουν την επεξεργασία πολύ μεγάλων παρουσιάσεων.

Μπορώ να χρησιμοποιήσω πολιτικές BLOB όταν φορτώνω από ροές αντί για αρχεία δίσκου;

Ναι. Οι ίδιες κανόνες ισχύουν για τις ροές: το αντικείμενο παρουσίασης μπορεί να κατέχει και να κλειδώνει τη ροή εισόδου (ανάλογα με τη λειτουργία κλειδώματος που έχει επιλεγεί), και τα προσωρινά αρχεία χρησιμοποιούνται όταν επιτρέπεται, διατηρώντας τη χρήση μνήμης προβλέψιμη κατά την επεξεργασία.