available();} public synchronized void mark(int readlimit) { (readlimit);} public synchronized void reset() throws IOException { ();} public boolean markSupported() { return rkSupported();} public void close() throws IOException { //do nothing}} Und benutze es in main public static void main(String[] args) throws Exception { (new UnClosableDecorator());} 12 für die Antwort № 2 Verwenden Sie einfach einen benutzerdefinierten FilterInputStream anstelle von new FilterInputStream() { //don"t close! }} 1 für die Antwort № 3 Sie könnten es einfach sein lassen, ohne es zu schließen. Setzen Sie einfach die Variable holding auf null
Lesezeit: 5 Minuten Ich habe ein Scanner verbunden mit. Jetzt, nach der Verwendung der Scanner, sollte ich es schließen, da es eine schlechte Programmierpraxis ist, es offen zu lassen. Aber wenn ich die schließe Scanner ich werde auch schließen! Kann mir jemand sagen wie ich die schließen kann Scanner ohne zu schließen (wenn es irgendwie geht). Am einfachsten ist es, Scanner nicht zu schließen, wenn Sie den zugrunde liegenden Stream nicht schließen möchten. Idealerweise sollten Sie nur einen Scanner erstellen, den Sie für die gesamte Lebensdauer des Programms verwenden. Auf jeden Fall scheint es, dass Sie keinen guten Grund haben, es zu schließen. Paul Jermann Eine Möglichkeit ist, Ihre zu wickeln Stream in ein CloseShieldInputStream das verhindert, dass es geschlossen wird. Ihr Leser würde dann die verwenden CloseShieldInputStream eher als das Rohe Strom. Schließen Sie Scanner, ohne System.in zu schließen - ViResist. Hier ist die API für die Klasse: Anstatt Schildklassen und ähnliches hinzuzufügen, fügen Sie einfach einen netten Kommentar hinzu und a @SuppressWarnings("resource") Das ist gut genug.
Eine Sache, die mir zumindest bei diesem speziellen Beispiel auffällt, ist, dass die inneren Streams scheinbar nur FileNotFoundExceptions auslösen. Was zu implizieren scheint, dass es technisch gesehen keine Notwendigkeit gibt, sich Gedanken über das Schließen zu machen, wenn sie fehlschlagen. Hier schrieb ein Kollege: Technisch gesehen sollte das Schließen des äußersten Streams (oos) ausreichen, wenn es richtig implementiert wurde. Scanner schließen java 3. Aber die Umsetzung scheint mangelhaft. Beispiel: BufferedOutputStream erbt close() von FilterOutputStream, was es wie folgt definiert: 155 public void close() throws IOException { 156 try { 157 flush(); 158} catch (IOException ignored) { 159} 160 (); 161} Wenn jedoch flush() aus irgendeinem Grund eine Laufzeitausnahme auslöst, wird () niemals aufgerufen. Daher scheint es "am sichersten" (aber hässlich) zu sein, sich hauptsächlich um das Schließen von FOS zu kümmern, wodurch die Datei geöffnet bleibt. Was gilt als der beste Ansatz zum Schließen verschachtelter Streams, wenn Sie unbedingt sicher sein müssen?