我使用itext java库生成PDF文件到Windows硬盘。 我正在使用的方法是
com.itextpdf.text.Document.add(元素元素)
此方法由多个线程调用(可配置)。 让我解释下面的一些示例数字正在发生的事情: 例如,我必须编写10个pdf文件,每个文件大小为100KB。所需的总大小为1000KB。硬盘中的可用空间为500KB。 发生了三件事:
所以问题出在第三种情况。该方法最终会出现问题。在第二种情况下,它会抛出异常,因为它在第三种情况下会这样做。 我的代码编写了数千个文件,在生产中,为多个服务器配置了大量的线程。
当有足够的磁盘空间可用时,此代码可以正常运行,而且在写入文件时磁盘空间耗尽时会出现问题。
我使用的itext库版本是5.0.6。 有什么帮助吗?
答案 0 :(得分:1)
我的观点是,当磁盘写入尚未完成时,add方法返回true的原因是什么?
方法评论说:
/**
* Adds an <CODE>Element</CODE> to the <CODE>Document</CODE>.
*
* @param element
* the <CODE>Element</CODE> to add
* @return <CODE>true</CODE> if the element was added, <CODE>false
* </CODE> if not
* @throws DocumentException
* when a document isn't open yet, or has been closed
*/
因此,根据文档,true
仅表示该元素已添加到此Document
实例本身,而不是光盘上的某个文件。
您肯定知道iText Document
仅仅是已注册DocListener
个实例侦听的文档抽象,并且至少有一个侦听器返回true
add
},Document.add
返回true。
PdfWriter.getInstance
调用会将新PdfDocument
实例添加为Document
侦听器,只要相关编写者PdfDocument.add
true
,null
就会返回true
并且暂停并且要添加的元素是已知类型,并且此处不会抛出异常。所以很可能它会在你的程序中一直返回brew install tmux
。
顺便说一下:
我使用的itext库版本是5.0.6
该版本很古老,所以除非您有非常特殊的支持合同,否则您可能无法获得符合预期的二进制兼容库版本。