Patrząc na dokumentacji Font#loadFont
natknąłem tej uwagi:Dlaczego `loadFont` nie zamyka strumienia wejściowego? Czy powinienem to zamknąć?
Metoda ta nie zamyka strumień wejściowy.
Niestety, nie jest to wyjaśnione ani rozszerzone. Więc moje pytanie brzmi:
Jakie są możliwe powody, dla których API nie zamknie strumienia wejściowego? Czy najprawdopodobniej chciałbyś ponownie użyć strumienia? I głównie użyć tej metody tak:
Font.loadFont(getClass().getResourceAsStream("path/to/font"), 13.0);
aby upewnić się, że czcionka jest dostępna dla mojej aplikacji, więc nigdy ponownie używać strumienia wejściowego, a ja naprawdę nie można myśleć o powód bym chcieć.
- Czy powinienem sam zamknąć strumień wejściowy? Czy powinienem spodziewać się problemów, jeśli nie zamykam strumienia wejściowego? W przeszłości miałem problemy z czcionką załadowaną w ten sposób, gdzie niektóre etykiety skonfigurowane z tą czcionką zaczęły wyświetlać kwadraty, podczas gdy inne (na tej samej scenie!) Działały poprawnie. Czy może to być związane z nie zamykaniem strumienia wejściowego?
To dobra zasada, że nie należy zamykać strumienia, który nie został otwarty. W tym przypadku metoda nie otwiera go, więc nie zamyka go. Na przykład, nie ma powodu, dla którego nie mógłbyś przekazać standardowego strumienia wejściowego: jeśli metoda zamknęła strumień parametrów, byłbyś wypchany, gdybyś musiał go otworzyć, by zrobić coś innego po nim. –
I nie, nie powinieneś zamykać go samodzielnie: użyj try z zasobami. –
@AndyTurner - użycie metody try-with-resources jest równoznaczne z zamknięciem go, po prostu cukier syntaktyczny. Chodziło mi o to, czy powinienem być odpowiedzialny za zamknięcie go, czy jest to uzasadnione, aby go otworzyć i nigdy go nie zamykać. – Itai