Мне нужно оптимизировать приложение, которое использует слишком много кучи памяти. У меня возникла проблема в закрытии переменной ByteArrayOutputStream после использования того же самого. Я попытался сделать это с помощью функции close(), но это не сработает. это код:Каков наилучший способ закрыть ByteArrayOutputStream?
ByteArrayOutputStream zipOutTempStream = new ByteArrayOutputStream();
//arquivo.getZipStream() has the XML received by FTP.
//STreamEtils is the function who transfers the XML to zipOutTempStream
StreamUtils.copiarStream(arquivo.getZipStream(), zipOutTempStream);
//Creating a new XML to write over this.
File arquivo1 = new File("C:/XML.xml");
if (arquivo1.exists()) {
System.out.println("ele existe");
} else {
if (arquivo1.createNewFile()) {
System.out.println("arquivo criado");
} else {
System.out.println("arquivo não criado");
}
}
FileOutputStream arquivo2 = new FileOutputStream(arquivo1);
//Copy the unziped XML to the new xml created.
StreamUtils.copiarStream(StreamUtils .uncompressXmlFromZipStream(new ByteArrayInputStream(zipOutTempStream.toByteArray())), arquivo2);
arquivo.setZipStream(null);
arquivo.setXmlStream(null)
return arquivo;
как это не работает? Вы получили сообщение об ошибке? – Dan
«ByteArrayOutputStream» записывает данные в массив байтов. После закрытия 'ByteArrayOutputStream' массив байтов доступен с помощью метода' toByteArray'. Простое закрытие 'ByteArrayOutputStream' не сделает байтовый массив подходящим для сбора мусора. – emory
Я работаю, но проблема в том, что у меня есть XML 80 МБ, и после того, как я сохраню в C:, я бы хотел освободить используемую память кучи. – user1324916