1

我知道这里有一个类似的问题,来自一个想将单个文件分成多个文件的人。遗憾的是,由于创建新文件会产生一定的开销,因此该解决方案不适用于我。

背景(无需阅读):

我想要做的是生成任意大小的 PDF 文件来播种数据库(即调用具有所需文件大小的方法,以千字节或兆字节为单位,应该生成所需大小的文件)。

目前,我通过使其随机并将其以 1KB 块(以段落形式)放入文件中来确保输入数据不可压缩。在将输出字节数绘制为所需字节数的函数后,我更改了算法以解释这种(令人愉快和预期的)线性关系。

然而,由于输入数据的随机性,这种方法存在一定的不确定性,其绝对值会随着所需大小的增加而增加(因此,尽管它减少了百分之一,但百分之一在 20 MB 的文件中,一个百分比的绝对值变得非常重要)。

理想情况下,我将能够生成任意大小的文件,大小在千字节以内,但为了做到这一点,我需要知道任何给定操作后的文件大小,为了知道这一点,我需要知道什么时候PDFWriter 写入其缓冲区。或者至少该缓冲区有多大(即,如果缓冲区小于一千字节,则写入时间无关紧要,因为我只关心准确到该边距内)。

问题:

有没有办法在不关闭文档的情况下使用文本检查实际要在 PDF 中写入磁盘的数据字节数?

还是“关闭文档”仅仅意味着它刷新缓冲区并关闭流(即它不需要在文件关闭时将任何额外的非用户输入数据量写入文件)?

4

1 回答 1

2

当你构建你的PdfWriter 时,你必须指定一个OutputStream,它不一定是一个 FileOutputStream。因此,如果您以这种方式构建它

      ByteArrayOutputStream baos = new ByteArrayOutputStream();
      PdfWriter writer = PdfWriter.getInstance(document, baos);
       . . .          

您可以随时检查缓冲区大小:

 System.out.println("Current size: " + baos.size());

希望这会帮助你。

于 2012-06-28T08:14:50.230 回答