Мне нужно прочитать несколько небольших файлов и добавить их в один файл большего размера.
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, будут неправильными (неправильный вывод).
Вопросы:
- Мне сказали, что открытие/закрытие выходного потока для одного и того же ресурса не является хорошей практикой, почему?
- Почему использование одного выходного потока не дает того же результата, что и несколько отдельных?