我正在编辑PDF文件的Java应用程序。此外,使用带ghostscript的shell脚本来制作Pdf图像,然后在Java应用程序中将图像作为缓冲图像读取。当然,图像的创建需要一些时间。可以避免将图像保存在硬盘上?相反,我想使用仅存在于RAM中的虚拟地点。我试图寻找这个,但林不知道什么关键字我寻找。如何创建虚拟磁盘空间以避免保存在硬盘上?
0
A
回答
1
你可以让Ghostscript输出图像(而不是磁盘文件,但是)到stdout
。然后你可以让另一个程序(或你的Java应用程序)从stdin
中读取。
因此,通过管道可以很容易地连接两个应用程序。一个管道肯定是一个'虚拟的地方,只存在于内存',你不需要为此创建一个额外的虚拟文件系统。
Ghostscript的语法(LINUX,UNIX,MacOSX的):
gs \
-q \
-dBATCH \
-dNOPAUSE \
-sOutputFile=%stdout \
-sDEVICE=tiffg4 \
-r600 \
-dLastPage=1 \
input.pdf \
| \
identify -
这将确保避免写输出文件到硬盘...
然而,你主要关注的似乎是,实际写入输出的磁盘(并再次从磁盘读取)会花费您太多宝贵的处理时间。
它可能就是Ghostscript的实际处理比写结果慢得多的情况。在这种情况下,如果您避免了磁盘I/O,那么您的净赢不会太好。(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”是否会导致性能增益值得值得的唯一方法,并且还可以获得多少增益。
0
试试Apache Commons VFS。它带来了一个虚拟文件系统API以及几个方便的实现,尤其是RAM一个
相关问题
- 1. 避免磁盘
- 2. MongoDb:避免过多的磁盘空间
- 3. Azure虚拟机磁盘空间不足
- 4. 如何避免在硬盘上保存文件?
- 5. 如何增加Docker Sonarqube磁盘空间以避免此警告?
- 6. racadm无法创建虚拟磁盘
- 7. 虚拟机增加磁盘空间并达到磁盘空间不足问题
- 8. 创建虚拟硬盘驱动器
- 9. 在iPhone上保留磁盘空间
- 10. 虚拟硬盘在VMware中
- 11. Powershell将虚拟中心中的虚拟硬盘与其磁盘标签匹配
- 12. Solr保留磁盘空间
- 13. 在Linux上使用C++创建虚拟硬盘
- 14. 监视Azure虚拟机上的可用磁盘空间
- 15. 我可以以编程方式在内存中创建虚拟磁盘吗?
- 16. 扩展虚拟磁盘
- 17. 如何避免物理磁盘I/O
- 18. urllib.urlretrieve在磁盘上创建
- 19. 如何为天青虚拟机创建数据磁盘?
- 20. 如何避免硬盘碎片?
- 21. 监控Azure虚拟硬盘
- 22. 如何用azure虚拟机上的附加数据磁盘替换os磁盘
- 23. 虚拟机现在分配所有磁盘空间
- 24. 如何在Windows上使用Java创建虚拟磁盘(字母,共享等)?
- 25. PopupWindow以上虚拟键盘
- 26. 用VC++在windows上保护虚拟磁盘
- 27. 硬盘磁盘空间每天由1gig卸载
- 28. 模拟磁盘空间异常
- 29. 将大型数据集PCA保存在磁盘上供以后与有限的磁盘空间一起使用
- 30. 在运行时创建Pojo并将其保存在磁盘上?
我想我很困惑。如果你想将图像保存在RAM中,为什么不缓存'BufferedImage'? – Gene