Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:多个outputstreams单个文件_Java_Fileoutputstream - Fatal编程技术网

Java:多个outputstreams单个文件

Java:多个outputstreams单个文件,java,fileoutputstream,Java,Fileoutputstream,我需要读取多个小文件并将它们附加到一个更大的文件中 Base64OutputStream baos = new Base64OutputStream(new FileOutputStream(outputFile, true)); for (String fileLocation : fileLocations) { InputStream fis = null; try { fis = new FileInputStream(new

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

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

问题是:

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

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

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

是否在BAS上调用flush()或close()?这里到底出了什么问题->“由baos写入的第一个文件之后的所有文件都是错误的(输出不正确)。”?close()将永久关闭流,这意味着我需要创建一个新的流。没有想到flush(),没有写入()与flush的工作方式相同?@YogendraSingh错误,正如我应该得到的/9j/4aaqskzjrgabageayabgaaad/但它说2f/Y/+aaeepgsuyaqibagaaaaa,完全不同的输出你在baos上调用flush()或close()了吗?这里到底出了什么问题->“baos编写的第一个文件之后的所有文件都是错误的(不正确的输出)。”?close()将永久关闭流,这意味着我需要创建一个新的流。没有想到flush(),没有写入()与flush的工作原理相同?@YogendraSingh错了,因为我应该得到/9j/4AAQSkZJRgABAgEAYABgAAD/但它说2f/Y/+aaeepgsuyaaqibagaaaaa,完全不同的outputok,我重读了几遍以前的答案才得到它,你完全正确。我的假设是错误的。好吧,我重读了几遍以前的答案才得到它,你完全正确。我的假设是错误的。