J'ai besoin d'optimiser une application qui utilise trop de mémoire de tas. Je rencontre un problème lors de la fermeture d'une variable ByteArrayOutputStream après l'avoir utilisée. J'ai essayé de faire en utilisant close() mais ça ne marche pas. c'est le code:Quelle est la meilleure façon de fermer un 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;
Comment ça ne marche pas? Avez-vous une erreur? – Dan
Un 'ByteArrayOutputStream' écrit des données dans un tableau d'octets. Après la fermeture de 'ByteArrayOutputStream', le tableau d'octets est accessible avec la méthode' toByteArray'. La simple fermeture de 'ByteArrayOutputStream' ne rendra pas le tableau d'octets éligible pour la récupération de place. – emory
je travaille, mais le problème est que j'ai un XML de 80 Mo et après avoir enregistré en C:, je voudrais libérer la mémoire tas utilisé. – user1324916