Streams



  • Oi!

    ich habe folgendes Problem

    ich habe eine Schleife und in der lege ich Streams an und arbeite damit , dann schließe ich sie wieder und falls ich einen weiteren Durchlauf habe geht das ganze von Vorne los, dann bekomm ich jedoch eine Exception wenn ich das beim zweiten Durchlauf zB ein readline aufrufe. Wenn ich die Streams in der Schleife jedoch nicht schließe (ich kann sie dann auch garnicht mehr schließen weil sie eh nur in der Schleife bekannt sind) dann geht es seltsamerweise!!

    Hier nochmal eine "Skizze"

    do
    {
    1)(Lege Streams an)
    2)(Arbeite mit den Streams)
    3)(Schließe Streams)
    }while( xxx );

    es geht nur ohne Punkt 3 oder wenn ich die Streams komplett außerhalb der Schleife anlege und sie natürlich nur dort schließe.

    Gruß und danke für wertvolle Hinweise!



  • Anstatt der Skizze wäre der Quellcode vielleicht nützlicher. Und btw. sobald der Stream vom Garbage Collector aufgesammelt wird, wird er auch geschlossen. Das macht also keinen Unterschied, ob du den Stream schließt oder nicht, wenn du jedes mal einen neuen verwendest.



  • import java.io.*;
    
    public class StreamProblem
    {
      public static void main(String[] args) throws IOException
      {
        String eingabe;
        do
        {
          InputStreamReader is = new InputStreamReader(System.in); // Von Konsole lesen
          BufferedReader br = new BufferedReader(is); // und zwar gepuffert!
          System.out.println( "Ihre Eingabe wird bis zu einen N gelesen: ");
          eingabe = br.readLine();
    
          // Wenn diese Zeilen nicht auskommentiert sind dann stürtzt das Programm bei erster Wiederholung ab
          br.close();
          is.close();
    
        }while ( Character.toUpperCase( eingabe.charAt( 0 ) ) != 'N' ); // Solange bis Benutzer nein klickt
    
      }
    }
    


  • ja du erstellst ja den streamreader jedesmal in jeder zeile
    du brauchst ja nicht fuer jede einleseoperation ein neues objekt, das waere etwas komisch

    aus dem bauch heraus wuerde ich das mal so umschreiben

    InputStreamReader is = new InputStreamReader(System.in); // Von Konsole lesen
          BufferedReader br = new BufferedReader(is); // und zwar gepuffert!
        do
        {
          System.out.println( "Ihre Eingabe wird bis zu einen N gelesen: ");
          eingabe = br.readLine();
        }while ( Character.toUpperCase( eingabe.charAt( 0 ) ) != 'N' ); // Solange bis Benutzer nein klickt
    
          br.close();
          is.close();
    


  • ja sicher also toll ist meine version nicht aber mir gings darum das ich wissen wollte warum es nicht funtzt, also weil die streams noch garnicht wieder zu sind durch das close und dann wieder neu gesetzt werden ?



  • so sehe ich das

    wobei wenn du mir die fehlermeldung der exception angibst dann kann ich dir genau sagen warum es passiert

    gomberl


Anmelden zum Antworten