Hi, thank you. I'm happy to hear that there is no bug.
I think the section about MemoyUsageSetting in the migration guide for 3.0 could profit from examples. It could show that you can either use the convenience methods, e.g. try (PDDocument pdDocument = Loader.loadPDF(new RandomAccessReadBufferedFile("yourfile.pdf"), IOUtils.createMemoryOnlyStreamCache())) { ... } or you can configure the MemoryUsageSettings yourself as in MemoryUsageSetting limitMainMemory = MemoryUsageSetting.setupMainMemoryOnly(10 * 1024 * 1024L); try (PDDocument pdDocument = Loader.loadPDF(new RandomAccessReadBufferedFile("yourfile.pdf"), limitMainMemory.streamCache)) { ... } > -----Ursprüngliche Nachricht----- > Von: Andreas Lehmkühler [mailto:andr...@lehmi.de.INVALID] > Gesendet: Samstag, 19. August 2023 11:24 > An: users@pdfbox.apache.org > Betreff: Re: [ANNOUNCE] Apache PDFBox 3.0.0 released > > Hi, > > @Erik thanks for the report but I guess there is a misunderstanding, see > inline > > Am 18.08.23 um 11:32 schrieb Brangs, Erik: > > Hi, > > > >> -----Ursprüngliche Nachricht----- > >> Von: Andreas Lehmkühler [mailto:andr...@lehmi.de.INVALID] > >> Gesendet: Freitag, 18. August 2023 07:42 > >> An: users@pdfbox.apache.org > >> Betreff: [ANNOUNCE] Apache PDFBox 3.0.0 released > >> > >> The Apache PDFBox community is pleased to announce the release of Apache > >> PDFBox 3.0.0. It is available for download at: > >> > >> https://pdfbox.apache.org/download.html > >> > >> [...] > >> > >> A migration guide is available at > >> > >> https://pdfbox.apache.org/3.0/migration.html. > >> > >> It is still a work in progress and we are happy to include any valuable > >> feedback from our community. > > > > I was going to suggest to update the documentation to say that you can use > > the > streamCache field of MemoryUsageSetting rather than using IOUtils. However, > I've > looked at the code of MemoryUsageSetting and I'm not actually sure if that's > correct. > > > > I think there's a bug in MemoryUsageSetting: The comment for streamCache > > says > that it creates "an instance of ScratchFile using the current settings". > However, the line > > > > public final StreamCacheCreateFunction streamCache = () -> new > > ScratchFile(this); > This is a functional interface. No instance of ScratchFile is created > when creating an instance of MemoryUsageSetting. It is created once the > functional interface is used. > > > is executed at the start of the constructor of MemoryUsageSetting before the > instance variables have been set. At least that's what the bytecode output > from javap > -c -p says: > > > > private org.apache.pdfbox.io.MemoryUsageSetting(boolean, boolean, long, > > long); > > Code: > > 0: aload_0 > > 1: invokespecial #1 // Method > > java/lang/Object."<init>":()V > > 4: aload_0 > > 5: aload_0 > > 6: invokedynamic #2, 0 // InvokeDynamic > #0:create:(Lorg/apache/pdfbox/io/MemoryUsageSetting;)Lorg/apache/pdfbox/io/Rand > omAccessStreamCache$StreamCacheCreateFunction; > > 11: putfield #3 // Field > streamCache:Lorg/apache/pdfbox/io/RandomAccessStreamCache$StreamCacheCreate > Function; > > 14: iload_2 > > > I can't read the byte code but I've double checked the behaviour when > debbugging one of our test cases > > org.apache.pdfbox.multipdf.PDFMergerUtilityTest.testJpegCcitt() > > Fortunately everthing is fine ;-) > > Andreas > > > I think the initialization of ScratchFile needs to happen at the end of the > > constructor > if the settings are supposed to be used. > > > > > > > --------------------------------------------------------------------- > > To unsubscribe, e-mail: users-unsubscr...@pdfbox.apache.org > > For additional commands, e-mail: users-h...@pdfbox.apache.org > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: users-unsubscr...@pdfbox.apache.org > For additional commands, e-mail: users-h...@pdfbox.apache.org