Java pdfbox-性能调整

Java pdfbox-性能调整,java,spring,pdfbox,Java,Spring,Pdfbox,如何增强下面的代码以节省时间,下面的代码在加载PDF后不应用任何业务逻辑,只需384毫秒 有什么建议吗 MultipartFile文件=。。。; 字节[]pdfByte=file.getBytes(); PDDocument pdfDoc=PDDocument.load(新的ByteArrayInputStream(pdfByte)); 列表签名=pdfDoc.getSignatureDictionaries(); pdfDoc.close(); 从评论中可以看出,真正的问题是如何加快获取签名字

如何增强下面的代码以节省时间,下面的代码在加载PDF后不应用任何业务逻辑,只需384毫秒

有什么建议吗

MultipartFile文件=。。。;
字节[]pdfByte=file.getBytes();
PDDocument pdfDoc=PDDocument.load(新的ByteArrayInputStream(pdfByte));
列表签名=pdfDoc.getSignatureDictionaries();
pdfDoc.close();

从评论中可以看出,真正的问题是如何加快获取签名字节的速度。使用此代码可防止再次读取文件:

COSString contents = (COSString) signature.getCOSObject().getDictionaryObject(COSName.CONTENTS);
byte [] signatureBytes = contents.getBytes();
在PDFBox 2.0.22中,将有一个不带参数的新方法
PDSignature.getContents()
,它不会再次读取PDF

另一个要加速的事情是加载PDF,如下所示:

PDDocument pdfDoc = PDDocument.load(pdfByte);

因为从输入流加载将创建另一个缓冲副本。

如果
文件的类型为
java.io.file
,则可以使用更简单的
PDDocument.load()
重载,例如
PDDocument.load(file)
。这可能会避免不必要的
字节[]
复制。也就是说,我敢打赌这不会有多大变化,是吗?首先,你是如何测量384ms的?众所周知,Java中的基准测试非常困难,例如JVM需要预热以获得性能关键任务的最大性能。要确定这一点,您需要使用JMH和/或profiler来查看花费的时间。哦,但是您肯定需要准确地测量您花费的时间(通过分析,查看异步profiler或Java飞行记录器,可通过Java任务控制进行访问)。无论如何,我提供了一个可能的解决方案,在我的机器上似乎要快得多。无关:在完成之前不要关闭文件。谢谢@PetrJaneček,我需要获取字节才能获取byte[]signaturesBytes=signature.getContents(pdfByte);byte[]signedContentAsBytes=signature.getSignedContent(pdfByte);对我来说更重要的是:你为什么要提高绩效?门槛是多少?