英文:
pdfbox - performance tuning
问题
如何优化以下代码以减少运行时间,以下代码在加载PDF后未应用任何业务逻辑时耗时为384毫秒。
有什么建议吗?
MultipartFile file= ...;
byte[] pdfByte = file.getBytes();
PDDocument pdfDoc = PDDocument.load(new ByteArrayInputStream(pdfByte));
List<PDSignature> signatures = pdfDoc.getSignatureDictionaries();
pdfDoc.close();
英文:
How to enhance the below code to take less time, the below code takes 384 ms without applying any business logic after load the PDF.
Any suggestions ?
MultipartFile file= ...;
byte[] pdfByte = file.getBytes();
PDDocument pdfDoc = PDDocument.load(new ByteArrayInputStream(pdfByte));
List<PDSignature> signatures = pdfDoc.getSignatureDictionaries();
pdfDoc.close();
答案1
得分: 1
从评论中可以看出,实际问题是如何加快获取签名字节的速度。使用以下代码可避免再次读取文件:
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);
因为从 InputStream 加载会创建另一个缓冲副本。
英文:
From the comments it turns out that the real question is how to speed up getting the signature bytes. Use this code to prevent reading the file a second time:
COSString contents = (COSString) signature.getCOSObject().getDictionaryObject(COSName.CONTENTS);
byte [] signatureBytes = contents.getBytes();
In PDFBox 2.0.22 there will be a new method PDSignature.getContents()
without parameters which doesn't read the PDF a second time.
Another thing to speed up is to load the PDF like this:
PDDocument pdfDoc = PDDocument.load(pdfByte);
because loading from an InputStream would create another buffered copy.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论