我的应用程序正在尽可能快地将大量视频和 i2c 传感器数据记录到磁盘文件中。目前,我正在将所有内容都转换为字节,并且正在使用 BufferedOutputStream 进行编写。@Siguza 非常友好地建议研究 GZIPOutputStream 来完成任务。我想知道你是否对性能问题有任何想法赞成和反对......我认为处理器遥遥领先,磁盘写入是瓶颈 - 所以我希望在写入之前通过 GZIPOutputStream 进行动态压缩可能是一个很好的策略。对此的任何想法都非常受欢迎。
补充:回应评论...
事实证明,压缩并不是那么昂贵的处理器......正如欧文正确指出的那样,我提出原始问题的方式并不好。关于压缩性能的问题不在 BufferedOutputStream 和 GZIPOutputStream 之间......压缩和解压缩的流都需要包装到 BufferedOutputStream 中,但是如果原始 FileOutputStream 在它之前先包装在 GZIPOutputStream 中,会增加多少成本包装在 BufferedOutputStream 中。这是答案。我正在使用代码
byte[] bs = RHUtilities.toByteArray((int)1);
boolean zipped = false;
FileOutputStream fos = new FileOutputStream(datFile);
BufferedOutputStream bos = null;
if (zipped) {
GZIPOutputStream gz = new GZIPOutputStream(fos);
bos = new BufferedOutputStream(gz);
} else
bos = new BufferedOutputStream(fos);
long startT = System.currentTimeMillis();
for (int i=0; i<1000000; i++)
bos.write(bs);
bos.flush();
System.out.println(System.currentTimeMillis()-startT);
bos.close();
我的 2012 macpro 笔记本电脑写入了 100 万个整数
zipped=true in 38ms - filesize 4MB
zipped=false in 21ms - fileSize 4KB
而且,是的,我喜欢压缩:-)
读取性能几乎相同 83 vs 86ms
FileInputStream fin = new FileInputStream(datFile);
和
GZIPInputStream gin = new GZIPInputStream(new FileInputStream(datFile));
都好 ...