Partage
  • Partager sur Facebook
  • Partager sur Twitter

Où placer une méthode utilisable partout?

    31 juillet 2018 à 14:34:19

    Bonjour!

    Je me suis rendue compte que ces quelques lignes de codes étaient copiées-collées un peu partout dans mon code:

    			    FileOutputStream fos = new FileOutputStream(encryptedFile);
    				DataInputStream dis = new DataInputStream(socket.getInputStream());
    	            int count;
    	            byte[] buffer = new byte[4096];
    	            while ((count = dis.read(buffer)) > 0)
    	            {
    	              fos.write(buffer, 0, count);
    	            }
    	            fos.close();

    avec des input/output Stream différents à chaque fois.

    Je me suis dit que je pourrais en faire une méthode " void transfert (InputStream in, OutputStrem out) " et au lieu d'avoir ces lignes de code à chaque fois appeler la méthode.

    Ma question: quel serait alors le meilleur endroit où placer cette méthode?

    1) Un package "commun" que j'importerais au besoin

    2) Dans une classe à part que je me débrouillerais pour ajouter à mes librairies  (sisi, je dois pouvoir y arriver...sans doute.)

    3) Ailleurs?

    Accessoirement, je ne suis pas très sûre de comment je devrais la créer. D'abord, il me semble que je suis bien obligée de créer une classe pour ça; ensuite, j'ai pas envie que la méthode soit le constructeur de la classe parce que dans ma tête ce serait "créer un objet de type <cetteclasse> " donc ça va pas.

    Donc pour l'instant, j'ai dans l'idée de créer une classe avec un constructeur "vide" et cette méthode en static; pour l'utiliser il faudra alors que je fasse MaClasse.transfert(in, out). Ce qui me paraît assez correct / compréhensible (pour un peu que je trouve un nom convenable pour la classe).

    Dites-moi si c'est pas comme ça qu'il faudrait faire ^^

    • Partager sur Facebook
    • Partager sur Twitter
      7 août 2018 à 9:01:35

      Bonjour, 

      Pourquoi pas une classe 'Utilitaires' qui contiendrait cette méthode et pourquoi pas d'autres, en 'protected', je pense que ça peut être pas mal ;)

      • Partager sur Facebook
      • Partager sur Twitter
        7 août 2018 à 11:26:10

        Bonjour,

        Un package "common" ou "util" permet de regrouper des éléments communs, techniques ou non.
        Une classe utilitaire, avec que des méthodes "statique", généralement suffixé par "Util".

        Au passage :

        • ton code a des bugs au niveau des ".close()"
          Mieux vaut utiliser un "try-with-resources" pour les gérer
        • ton code ressemble fortement à quelque chose déjà existant.
          Jette un oeil à IOUtils de la lib "common-io", ou à Files du JDK
        • Partager sur Facebook
        • Partager sur Twitter
        Angular 2 est l'avenir, jQuery c'est de la merde !!! - Java 8 c'est l'an 2016+ (programmez en 1 ligne)
          7 août 2018 à 11:45:56

          Merci!

          Ah oui, il semble qu'il existe plusieurs fonction copy dans IOUtils qui font ça avec différents input/output, je vais voir si je peux les utiliser.

          L'ennui, c'est qu'elles ferment sûrement les streams correctement, et comme tu l'as fait remarquer je ne le fais pas pour une raison toute simple: fermer le stream du Socket va fermer le socket. Donc je ne le ferme qu'à la toute fin, quand j'ai tout fini. Par chance, ça fonctionne quand même... mais pas partout, il y a un endroit où je suis obligée de fermer le stream, et du coup va falloir que je trouve un moyen de rouvrir le socket; si j'y arrive, je pourrais utiliser les fonctions toutes faites :)

          • Partager sur Facebook
          • Partager sur Twitter

          Où placer une méthode utilisable partout?

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown