我正在读别人的代码.这是它的要点.
类使用GZIPInputStream和GZIPOutputStream压缩和解压缩文件.
这是压缩过程中发生的事情的片段.inputFile并且outputFile是班级的实例File.
FileInputStream fis = new FileInputStream(inputFile);
GZIPOutputStream gzos = new GZIPOutputStream(new FileOutputStream(outputFile));
//the following function copies an input stream to an output stream
IOUtils.copy(fis,gzos);
//outputFile is the compressed file
...
Run Code Online (Sandbox Code Playgroud)
现在,这是解压过程中发生的事情.
GZIPInputStream gzis = new GZIPInputStream(new FileInputStream(inputFile));
ByteArrayOutputStream baos = new ByteArrayOutputStream();
//copies input stream to output stream
IOUtils.copy(gzis,baos);
//this method does as its name suggests
FileUtils.writeByteArrayToFile(outputFile, baos.toByteArray());
//outputFile is the decompressed file
...
Run Code Online (Sandbox Code Playgroud)
原始程序员FileOutputStream在压缩ByteArrayOutputStream和解压缩过程中选择的原因是什么?这让我很困惑.
除非有充分的理由,否则我认为我正在改变它们,以避免将来混淆.这是一个好主意吗?
Chr*_*ung 11
嘿,听起来像他们复制和粘贴来自不同来源的代码?:-P不,严重的是,除非您需要检查解压缩的数据,否则您只需使用a BufferedOutputStream进行压缩和解压缩.
的ByteArrayOutputStream是更多的内存粗加工,因为它存储在Java的内存中的全部内容(在的味道byte[]).在FileOutputStream写入盘直接并且是存储器拱因此以下.ByteArrayOutputStream在这种特殊情况下,我没有看到任何明智的理由.之后不会修改单个字节.之后它只会被写入文件.因此,这是一个不必要的中间步骤.