IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

avec Java Discussion :

Initialisation des "input streams"


Sujet :

avec Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 56
    Par défaut Initialisation des "input streams"
    Bonjour,

    J'espère que cen'est pas encore un truc évident pour tout le monde, mais sur la classe suivante je suis venu à bout de toutes les erreurs de compilation sauf une.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
     
    package sub;
     
    import java.io.*;
     
    public class TsFinder{
    	String fileName;
    	TsFinder(String s){fileName=s;} //Constructeur avec fourniture du nom 
     
    	public int getStart(){
    		int inByte;
    		int iBase=0;
    		int iCycle=0;
    		int iSuccess=0;
    		boolean isFound=false;
    		int offset=0;
    		BufferedInputStream inStream;
     
    		try{
    			inStream = new BufferedInputStream (new FileInputStream(fileName));
    			while((inByte=inStream.read())!=-1){
    				if (isFound==true){
    					if ((inByte==0x47)&(iCycle==188)){
    						iSuccess++;
    						iCycle=0;
    					}
    				}else {
    					if(inByte==0x47){
    						isFound=true;
    						offset=iBase;
    					}
    				}
    			}
     
    		}catch (FileNotFoundException ef){
    			System.out.println("File not found");
    		}catch (IOException e){
    			System.out.println(e);
    		}finally{
    			if(inStream!=null) inStream.close();
    		}
    		return offset;
    	}
     
    }
    Sur la clause "finally", Eclipse me dit
    1. Unhandled exception type IOException
    2. The local variable inStream may not have been initialized.
    3. The local variable inStream may not have been initialized.

    Merci des avis de spécialistes

    Gabier

  2. #2
    Membre Expert Avatar de guigui5931
    Profil pro
    Chef de projet NTIC
    Inscrit en
    Avril 2006
    Messages
    1 667
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 667
    Par défaut
    Ta variable inStream doit être initialisé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    BufferedInputStream inStream = null;
    Dans ton finally tu doit catcher l'IOException
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    }finally{
            try{
    	if(inStream!=null) inStream.close();
            }catch (IOException e){
    			System.out.println(e);
    	}
    }

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 56
    Par défaut
    Citation Envoyé par guigui5931 Voir le message
    Ta variable inStream doit être initialisé :
    Là je trouve que le compilateur est un peu pointilleux.

    Citation Envoyé par guigui5931 Voir le message
    Dans ton finally tu doit catcher l'IOException
    OK, mais ça devient vraiment compliqué.

    Dans l'exemple ci-dessous pris dans un tuto sur ce site
    et dont je me suis largement inspiré, il n'y a ni initialisation de l'input stream, ni catch multiple de IOException. Il est vrai que l'auteur met les catch après finally, ce qui paraîtt également bizarre. Mais enfin, ce que tu m'as donné résoud le problème, alors merci.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    import java.io.*;
     
    public class TestBufferedInputStream {
    	public static void main(String[] args){
    		BufferedInputStream bis;
    		int byteLu;
    		Byte[] buffer;
    		try{
    			//creation d'un BufferedInputStream sur un InputStream ayant pour 			
    			//source un fichier nommé source,
    			bis=new BufferedInputStream(new FileInputStream("source"));
    			//la methode available permet de connaitre le nombre de bytes qui 			
    			//pourront étre lus d'une manière non bloquante.
    			System.out.println(bis.available());
    			//lecture des données
    			System.out.println("debut lecture");
    			try{
    				long startChrono=System.currentTimeMillis();
    				while((byteLu=bis.read())!=-1);
    				System.out.println("fin lecture");
    				 System.out.println("durée="+(System.currentTimeMillis()-startChrono));
    			}
    			finally{
    				//ne pas oublier de refermer le flux
    				bis.close();
    			}
    		}catch(FileNotFoundException ef){
    			System.out.println("fichier introuvable");
    		}
    		catch(IOException e){
    			System.out.println(e);
    		}
    	}
    }
    Gabier

  4. #4
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Salut,

    Citation Envoyé par gabier Voir le message
    Là je trouve que le compilateur est un peu pointilleux.
    Oui, et cela permet un code sûr et surtout l'impossibilité d'avoir une référence dans un état incorrect. Bref du code un peu plus sûr.



    Citation Envoyé par gabier Voir le message
    OK, mais ça devient vraiment compliqué.
    +1

    L'utilisation d'un try/finally à l'intérieur d'un blog try/catch est plus souple à mon gout. De plus cela permet de limiter la porté de l'objet et de la déclarer lors de l'ouverture.


    a++

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2008
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 56
    Par défaut
    Citation Envoyé par adiGuba Voir le message
    Oui, et cela permet un code sûr et surtout l'impossibilité d'avoir une référence dans un état incorrect. Bref du code un peu plus sûr.
    Ouais... Pour certains objets il râle et pour d'autres il laisse faire et initialise lui-même à 0 ou NULL ... Mais le principal est de le savoir.




    Citation Envoyé par adiGuba Voir le message
    L'utilisation d'un try/finally à l'intérieur d'un blog try/catch est plus souple à mon gout. De plus cela permet de limiter la porté de l'objet et de la déclarer lors de l'ouverture.
    Pas compris, mais c'est pas grave.

    Merci pour les conseils

    Gabier

  6. #6
    Expert éminent
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par gabier Voir le message
    Ouais... Pour certains objets il râle et pour d'autres il laisse faire et initialise lui-même à 0 ou NULL ... Mais le principal est de le savoir.
    Cela ne dépend pas du type de l'objet mais de la référence que tu utilises :
    • Les variables locales doivent être initialisé avant d'être utilisé.
    • Les attributs d'instances sont implicitement initialisé à null.






    Citation Envoyé par gabier Voir le message
    Pas compris, mais c'est pas grave.
    Ben que le try/finally dans un try/catch apporte un meilleur découpage qu'un seul et unique try/catch/finally...


    a++

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 14
    Dernier message: 30/11/2007, 11h58

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo