Pagina 1 di 4 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 33
  1. #1
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    457

    Java - Concatenare un array di byte

    Salve ragazzi,
    avrei bisogno di sapere
    come congiungere n array di tipo byte.

    Nello specifico ho n array di byte che devono essere uniti...in pratica se ho :

    byte[] a1=.......

    byte[] a2=.......
    byte[] a3=.......
    byte[] a4=.......
    byte[] a5=.......
    byte[] an =.......


    dovrei ottenere una array totale che rappresenta la loro unione

    byte[] Tot= a1+a2+a3+a4+a5+...an;

    Qualcuno ha qualche idea?

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,315
    Se gli array non sono contenuti in una struttura dinamica, ma sono "sciolti", dovrai per forza agire staticamente sul codice per ottenere la dimensione dei vari array e per effettuare la concatenazione:

    codice:
    byte[] risultato = new byte[a1.length + a2.length + a3.length + ... + an.length];
    int pos = 0;
    for(int i=0; i<a1.length; i++) risultato[pos++] = a1[i];
    for(int i=0; i<a2.length; i++) risultato[pos++] = a2[i];
    for(int i=0; i<a3.length; i++) risultato[pos++] = a3[i];
    ...
    for(int i=0; i<an.length; i++) risultato[pos++] = an[i];
    
    // risultato sarà un array contenente la concatenazione di tutti gli altri
    Se, al contrario, gli array sono contenuti in una struttura dati (tipo un ArrayList di array di byte), allora risulta più semplice:

    codice:
    ArrayList<byte[]> struttura = new ArrayList<byte[]>();
    ...
    int dimTot = 0;
    for(byte[] arr : struttura) dimTot += arr.length;
    byte[] risultato = new byte[ dimTot ];
    int pos = 0;
    for(byte[] arr : struttura) {
       for(int i=0; i<arr.length; i++) risultato[pos++] = arr[i];
    }
    
    // risultato sarà un array contenente la concatenazione di tutti gli altri
    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    io proverei con questo

    codice:
    byte[] risultato = new byte[a1.length + a2.length + a3.length + ... + an.length];
    int offset = 0; 
    System.arraycopy (a1, 0, risultato, 0, a1.length); 
     offset += a1.length;
    System.arraycopy (a2, 0, risultato, offset, a2.length); 
     offset += a2.length;
    //fino ad n.
    Poi se puoi mettere i tuoi array dentro una mappa il lavoro si semplifica ulteriormente
    RTFM Read That F*** Manual!!!

  4. #4
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    457
    grazie infinite,
    volevo chiederti dall'array dinamico secondo te come faccio a togliere la seguente stringa?

    stringaDaEliminare="<?xml version=\"1.0\" encoding=\"UTF-8\"?>"
    io ho scritto una funzione , ma sembra non funzionare del tutto

    codice:
    byte[] formatFile(byte[] result){
    	
    	int k=0;
    	int i=0;
    	
    	while(i<result.length){
    		
    	  if ((result.length-i)>="<?xml version=\"1.0\" encoding=\"UTF-8\"?>".length() &&  ((char)result[i]=='<' && (char)result[i+1]=='?' && (char)result[i+2]=='x')&& (char)result[i+3]=='m')
    		  i=i+"<?xml version=\"1.0\" encoding=\"UTF-8\"?>".length();
    	  else{
    		  result[k]=result[i];
    		  k++;
    		 i++;
    	  }
    	} 
    		
    	return result;
    }

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    devi usare == e non solo = e equals per confrontare stringhe
    poi in generale quella è sempre la prima riga, soprattutto considera che ci sono parser xml che funzionano perfettamente
    RTFM Read That F*** Manual!!!

  6. #6
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    457
    Scusami,
    sui byte come faccio ad usare equals...?

  7. #7
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    guarda la classe Arrays, ha un metodo statico che confronta due array di qualsiasi tipo (basta che il tipo degli array sia ovviamente uguale)
    RTFM Read That F*** Manual!!!

  8. #8
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    457
    Ho trovato il metodo Arrays.equals(bytes[],byte[]s)
    che confronta due array di byte.
    Il mio problema è che io dovrei passare all'argomento ogni volta un sottoarray e verificare se contiene una determinata sequenza di byte.

    esempio se ho il seguente file di nome sorgente.txt:

    <xml>
    intestazione della pagina

    numero visibile

    <xml>

    ancora sull'argomento

    <xml>

    Dovrei eliminare da questo file la stringa <xml> che in questo caso rappresenta il secondo array dell'argomento del metodo...

    Ora nella chiamata al metodo un array rimane fisso mentre l'altro varia perchè rappresenta lo scorrimento del file...
    Ti viene qualche idea in mente?

  9. #9
    Utente di HTML.it
    Registrato dal
    Feb 2007
    Messaggi
    4,157
    domanda numero 1:
    se devi analizzare file xml, perché non usi xml parser?
    se non costretto, quello che fai è reinventare la ruota

    domanda numero 2:
    devi ogni volta copiarti il contenuto del byte che varia dentro un buffer temporaneo e confrontarli
    buffer1 fisso e buffer2 variabili
    codice:
    byte buffer1 = new byte[2000];
    byte buffer2 = new byte[2000];
    byte bufferone = new byte[10000];
    int offset = 0; 
    for (int i = 0; i < bufferone.length; ){
        System.arraycopy(bufferone, offset, buffer2, 0, buffer2.length); 
        offset += buffer2.length; 
        Arrays.equals(buffer1, buffer2); 
    }
    devi fare una roba simile
    RTFM Read That F*** Manual!!!

  10. #10
    Utente di HTML.it
    Registrato dal
    May 2010
    Messaggi
    457
    Pensa che l'array buffer2 potrebbe essere molto grande , poichè è dinamico..quindi
    dovrei dargli una dimensione massima..qual è?

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.