Partage
  • Partager sur Facebook
  • Partager sur Twitter

Rajout d'un élément dans un ArrayList<byte[]>

chaque add(byte[]) met l'élément à toutes les positions

    23 octobre 2011 à 16:10:17

    Bonjour,

    J'ai un problème étrange dans mon programme.

    Je lis un tableau de 1024 bytes d'un BufferedInputStream, que j'ajoute à un ArrayList<byte[]>. Je fais ça tant qu'il y a quelque chose à lire.

    Quand je suis dans la boucle "while(input.read(read)>=0)" (read étant mon tableau) et que je l'affiche je vois bien que j'avance dans le flux et que je lis quelque chose de différent à chaque fois. Mais après l'avoir ajouté à l'ArrayList, quand j'essaye d'accéder à ces tableaux de bytes quelque soit l'index je retombe sur le même tableau (le dernier ajouté).

    Voyez vous où est le problème ?

    Merci d'avance !

    static ArrayList<byte[]> read(Socket sock) throws IOException{
    
        BufferedInputStream input = new BufferedInputStream(sock.getInputStream ()) ;
        byte[] read = new byte[1024];
        ArrayList<byte[]> a = new ArrayList();
        while(input.read(read)>=0){
            a.add(read);
        }
            System.out.println((new String(a.get(0), 0, a.get(0).length)));
            System.out.println((new String(a.get(1), 0, a.get(1).length)));
    
        return a;
       }
    
    • Partager sur Facebook
    • Partager sur Twitter
      23 octobre 2011 à 18:27:50

      Salut,

      Le problème vient du fait que tu instancies le tableau de byte qu'une seule fois. Donc tu as une seule référence sur un tableau de byte que tu modifies à chaque lecture.
      Pour y remédier, il faudrait un tableau de byte pour chaque lecture. Genre:
      static ArrayList<byte[]> read(Socket sock) throws IOException{
      
          BufferedInputStream input = new BufferedInputStream(sock.getInputStream ()) ;
          byte[] read = new byte[1024];
          ArrayList<byte[]> a = new ArrayList();
          while(input.read(read)>=0){
              a.add(read);
              /************************** ICI******************************************************/
              read = new byte[1024]; //Tu crées un nouveau tableau de byte pour stocker la prochaine lecture
          }
              System.out.println((new String(a.get(0), 0, a.get(0).length)));
              System.out.println((new String(a.get(1), 0, a.get(1).length)));
      
          return a;
         }
      
      • Partager sur Facebook
      • Partager sur Twitter

      Rajout d'un élément dans un ArrayList<byte[]>

      × 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