gpt4 book ai didi

java - 如何创建虚拟磁盘空间以避免节省硬盘空间?

转载 作者:行者123 更新时间:2023-12-01 15:19:50 25 4
gpt4 key购买 nike

我正在开发一个编辑 Pdf 文件的 Java 应用程序。此外,使用带有 Ghostscript 的 shell 脚本来制作 Pdf 的图像,然后在 Java 应用程序中将图像作为缓冲图像读取。当然,图像的创建需要一些时间。是否可以避免将图像保存在硬盘上?相反,我想使用仅存在于 RAM 中的虚拟位置。我尝试搜索此内容,但不确定要查找什么关键字。

最佳答案

您可以使 Ghostscript 将图像输出(不是到磁盘文件,而是)到 stdout。然后您可以创建另一个程序(或您的 Java 应用程序)来从 stdin 读取数据。

因此,通过管道可以轻松连接两个应用程序。管道肯定是一个“仅存在于 RAM 中的虚拟位置”,您不需要为此创建额外的虚拟文件系统。

Ghostscript 语法(Linux、Unix、MacOSX):

gs \
-q \
-dBATCH \
-dNOPAUSE \
-sOutputFile=%stdout \
-sDEVICE=tiffg4 \
-r600 \
-dLastPage=1 \
input.pdf \
| \
identify -

这肯定会避免将输出文件写入磁盘...

但是,您主要担心的似乎是实际将输出写入磁盘(并再次从磁盘读取)会花费您太多宝贵的处理时间。

Ghostscript 的实际处理可能比将结果写入磁盘慢得多。在这种情况下,如果您避免磁盘 I/O,您的净 yield 不会那么大。

好消息是,您可以轻松测量和基准测试两种方法之间的差异((1)首先使用 Ghostscript 将文件写入磁盘,然后使用第二个应用程序再次从磁盘读取文件;(2)将文件写入管道并读取直接从带有第二个应用程序的管道)以及一些典型的 PDF 输入:

首先,“写入磁盘并再次从磁盘读取”方法:

time \
(gs \
-q \
-dBATCH \
-dNOPAUSE \
-sOutputFile=1.tiff \
-sDEVICE=tiffg4 \
-r600 \
-dLastPage=1 \
input.pdf \
&& \
identify 1.tiff)

我的 PDF 样本结果:

real  0m1.231s
user 0m1.188s
sys 0m0.024s

第二,“通过管道连接两个程序,避免磁盘 I/O 开销”的方法:

time \
gs \
-q \
-dBATCH \
-dNOPAUSE \
-sOutputFile=%stdout \
-sDEVICE=tiffg4 \
-r600 \
-dLastPage=1 \
input.pdf \
| \
identify -

我对同一个示例 PDF 的结果:

real  0m1.459s
user 0m1.422s
sys 0m0.036s

第三,测量第二个程序需要从磁盘读取和处理文件的时间:

identify 1.tiff

我在这个例子中的结果:

real  0m0.023s
user 0m0.011s
sys 0m0.006s

当然,您的样本结果可能会非常非常不同。但是,进行(并重复多次)此类测量是确定在您的情况下“避免磁盘 I/O”是否会带来值得的性能增益以及可以预期获得多少增益的唯一方法。

关于java - 如何创建虚拟磁盘空间以避免节省硬盘空间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11100718/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com