Als Java-Entwickler macht man sich ja kaum Gedanken um Speicher und sonstiges. Ich mache mir z.B. auch nicht immer Gedanke was mit den Streams passiert, die ich so im laufe der Zeit öffne. Ein:
BufferedInputStream buffered = new BufferedInputStream(
new FileInputStream(file));
buffered.close();
bewirkt z.B., dass beim Schließen des BufferedStream auch gleichzeitig der FileInputStream geschlossen wird. Ist ja auch gewollt so.
Etwas kniffliger wird es leider mit dem SharedFileInputStream aus javax.mail.util. Dieser benutzt RandomAccess Files, und dass führt schnell zu Fehlern wenn man folgendes macht:
MimeMessage mime = new MimeMessage(
null, new SharedFileInputStream(file));
processMail(mime);
Hier wird leider beim Aufruf von processMail(mime), das unter dem SharedStream liegende RandomAccess File geschlossen, was mit einer “java.io.IOException: Bad file descriptor” Exception belohnt wird. Hier lohnt es sich, eine Referenz auf den Stream zu halten und diese erst selbst zu schließen, wenn die processMail() Methode zurückkommt.
Activity
phil
phil
phil, Jester, phil
Jester, phil
Max, honeybunny