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

Entrée/Sortie Java Discussion :

Lecture fichier via url ou file, différence ?


Sujet :

Entrée/Sortie Java

  1. #21
    Membre habitué
    Ok...

    le probleme me semble etre en fait la distance entre le pc d'éxécution et le serveur sur lequel se situe le fichier.
    Car en local (via url ou file), pas de souci, c'est à dire comme tu as testé.
    De mon coté, sur serveur se situant sur un réseau proche du mien, ca ne load pas complétement, environ que la moitié.
    Et là, je viens de faire le test avec un serveur client situé en belgique et ca ne load que le tiers.

    J'ai donc l'impression qu'il y a une correspondance. As-tu la possibilité de tester sur un serveur qui se trouve plus "loin" ou pas ?

  2. #22
    Rédacteur

    ca marche aussi sur un serveur http sur le reseau local... mais bon c'est du 100Mbs switché alors bof.

    je poursuis les tests...
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  3. #23
    Membre habitué
    Ok merci. Pour ma part je reviens vers les 13h30, je vais manger, bon ap

  4. #24
    Membre habitué
    Pourrais-tu faire le teste avec un fichier de taille supérieure ou égale à 876 832 octets ?

    Car j'utilise la meme méthode ailleurs dans un prog pour bien d'autres fichiers et tous passent nickel sur quelque serveur que ce soit. Mais ils ont tous une taille de 1 ou 2 ko seulement.

    Je voudrais voir si tu as le meme pb ou pas avec une grande taille.

    Encore merci pour ton aide

  5. #25
    Rédacteur

    J'ai reussi a reproduire le phenomene. C'est bien lié a l'inputStream qui ne contient pas assez de donné (moins de 106). Donc j'ai modifié comme suit:

    1. J'ai recuperé la taille du fichier que l'on doit lire

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    InputStream myFis = null;
    long myLength = 0;
     
    // HTTP
    URL url = new URL("http://httptestserver:80/"+theFileLocat);
    URLConnection urlconn = url.openConnection();
    myLength = urlconn.getContentLength();
    myFis = urlconn.getInputStream();
     
    // FILE
    File file = new File("Z:/webroot/"+theFileLocat);
    myLength = file.length();
    myFis = new FileInputStream(file);



    2. J'ai modifié la boucle pour attendre que l'inputStream soit remplie:

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    (...)
    while (compteur<myLength) { // tant que TOUT le fichier n'est pas lu
     
    	// attent une trame complete
    	while(myFis.available()<106) Thread.yield();
     
    	// lit la trame
    	myRet = myFis.read(myTabRead);
     
    	//--- builds the key
    (...)


    sur ce... bon app aussi
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  6. #26
    Membre habitué
    je vois ce que tu veux dire.

    Mais dans le cas ou on arrive à la fin du fichier et qu'il n'y a plus que moins 106 caractères à lire, le thred ne va-t-il pas attendre infiniement ?

  7. #27
    Rédacteur

    heu... si !

    Si ton fichier n'a pas une taille multiple de 106 => attente infinie.

    Donc re-modif:

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    (...)
    	long needed = Math.min(myLength-compteur,106);
    	while(myFis.available()<needed) Thread.yield();
    (...)
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  8. #28
    Membre habitué
    Il se trouve que mon fichier à une taille multiple de 106 justement, mais je voulais savoir dans le cas général, car quitte à faire autant que ce soit général au possible

    En tout cas je vois que ca fonctionne impéccable et je ne peux que te remercier énormément pour ton aide !

    Un grand merci à toi donc sans qui j'aurais certainement fini de cette facon

  9. #29
    Rédacteur

    De rien... c'etait sympa de t'aider... bcp plus que de me replonger dans mes pb actuels d'algo, de drivers, de code java, de dotnet3.0 et autres

    PS: n'oublie pas le tag
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.