Java:多个输出流单个文件

标签 java fileoutputstream

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

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 写入的第一个文件后面的所有文件都是错误的(输出不正确)。

问题:

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

最佳答案

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

关于Java:多个输出流单个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13695488/

相关文章:

java - Spring + Hibernate 不会自动打开 session

java - 如何保存和加载Android图像

Android,将文件写入数据/数据/'package'文件夹的子目录的正确方法是什么

java - FileOutputStream 无法正确写入非 .txt 文件

java - 如何以字符串 Base64 格式存储 PDF 内容

java - 如何在通过 SAX Xerces 解析 XML 文档时引用 XSD 架构位置?

Java - 为什么 readAllBytes 返回错误的字节码?

java - 如何从java中的.net SOAP Web服务获取XML响应?

java - javafx webview/webengine 上的自定义上下文菜单

java - 如何从另一个类访问 arrayList (存储在主类中)?