1

我需要读取多个小文件并将它们附加到一个更大的单个文件中。

Base64OutputStream baos = new Base64OutputStream(new FileOutputStream(outputFile, true));

for (String fileLocation : fileLocations) {
InputStream fis = null; 
        try
        {
            fis = new FileInputStream(new File(fileLocation));
            int bytesRead = 0;
            byte[] buf = new byte[65536];
            while ((bytesRead=fis.read(buf)) != -1) {
                if (bytesRead > 0) baos.write(buf, 0, bytesRead);
            }
        }
        catch (Exception e) { 
            logger.error(e.getMessage());
        }
        finally{
            try{
                if(fis != null)
                    fis.close();
            }
            catch(Exception e){
                logger.error(e.getMessage());
            }
        }
}

一切都很标准,但我发现,除非我为每个输入文件打开一个新的 baos(将其包含在循环中),否则 baos 编写的第一个文件之后的所有文件都是错误的(输出不正确)。

问题:

  • 有人告诉我,为同一资源来回打开/关闭输出流不是一个好习惯,为什么?
  • 为什么使用单个输出流不能提供与多个单独输出流相同的结果?
4

1 回答 1

1

也许问题在于,如果您假设在 base64 中进行编码,则连接多个文件的结果应该与连接每个文件的 base64 编码的结果相同?情况并非如此。base64 将三个连续输入字节的组编码为 4 个 ascii 字符,因此,除非您知道每个文件的大小是三的倍数,否则 base64 编码将产生完全不同的输出。

于 2012-12-04T03:45:41.383 回答