Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2006
    Messaggi
    127

    problema ridimensionamento array

    ciao !!

    allora ho un problema con questa classe FileInputStream.

    in pratica vorrei aprire uno stream e leggere con un ciclo il contenuto byte per byte, questo procedimento però per file molto grandi è abbastanza lento, vorrei velocizzare la cosa usando read(byte[] b)

    questo è il ciclo attuale con read (byte)
    codice:
     InputStream                 dIn = new FileInputStream(fileName);
            int                                     ch;
    while ((ch = dIn.read()) >= 0)
            {
                sig.update((byte)ch);
                
            }
    io vorrei fare una cosa del genere

    codice:
     InputStream                 dIn = new FileInputStream(fileName);
            int                                     ch;
    byte b[]=new byte[500];
    while ((ch = dIn.read(b)) >= 0)
            {
                sig.update((byte[])b);
                
            }
    il problema si verifica nel caso in cui "b" dopo la lettura non è riempito in tutti i 500 componenti , immaginiamo un ultima lettura di 400 byte ....
    quando viene invocato il metodo update, dovrei ridimensionare l'array in base a quanti byte sono stati letti effettivamente, non posso mettere nemmeno un byte in più !!
    non vorrei dover usare un array d'appoggio in cui copiare i primi "ch" byte !!

  2. #2
    Utente di HTML.it
    Registrato dal
    Jan 2006
    Messaggi
    127
    ho provato ad usare un array di appoggio in cui copiare i byte letti... mi aspettavo fosse più lenta la cosa, cmq è poco elegante, se avete qualche idea migliore è sempre ben accetta

    ecco la modifica con l'array di appoggio
    codice:
    byte b[]=new byte[500];
         
            while ((ch = dIn.read(b)) >= 0)
            {
    			
    			byte app[]=new byte[ch];
    			for(int j=0;j<ch;j++) app[j]=b[j];
                sig.update((byte[])app);
                
            }

  3. #3
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: problema ridimensionamento array

    Originariamente inviato da tulkas85
    il problema si verifica nel caso in cui "b" dopo la lettura non è riempito in tutti i 500 componenti , immaginiamo un ultima lettura di 400 byte ....
    quando viene invocato il metodo update, dovrei ridimensionare l'array in base a quanti byte sono stati letti effettivamente, non posso mettere nemmeno un byte in più !!
    Non hai precisato cosa è quel 'sig' ma se quella classe è stata fatta in modo abbastanza "furbo", allora dovrebbe avere una versione in overload di update() che ha come parametri array/offset/length. E non dovresti ridimensionare alcunché ...

    EDIT: se quel 'sig' è un java.security.Signature o java.security.MessageDigest, allora sì, confermo che queste classi sono state fatte in modo "furbo" e offrono diverse versioni in overload di update(), tra cui quella con array/offset/length.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  4. #4
    Utente di HTML.it
    Registrato dal
    Jan 2006
    Messaggi
    127
    mmm si in effetti sig è un oggetto di tipo PgpSignature che immagino derivi da Signature....ma tu sei un indovino ?? :P

    risolto utilizzando il metodo con offset e lenght grazie mille

  5. #5
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da tulkas85
    mmm si in effetti sig è un oggetto di tipo PgpSignature
    org.bouncycastle.openpgp.PGPSignature?? Anche questo ha il update() con offset/length!!
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

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.