Pagina 1 di 4 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 31

Discussione: Errori in java

  1. #1

    Errori in java

    Salve a tutti,
    nell'applicazione che ho creato (lavora sui file), se passo file troppo grandi mi viene restituito l'errore OutOfMemoryError.
    Non ho molta pratica con gli errori (infatti si parla molto soltanto delle eccezioni).
    Intanto: qualcuno conosce un modo per ovviare a questo inconveniente, senza modificare profondamente il programma?

    E un errore come lo gestisco? Uso i try-catch come con le eccezioni?

    Grazie

    Ciao
    La differenza fra la genialità e la stupidità è che la genialità ha i suoi limiti.


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

    Re: Errori in java

    Originariamente inviato da furbostandby
    nell'applicazione che ho creato (lavora sui file), se passo file troppo grandi mi viene restituito l'errore OutOfMemoryError.

    qualcuno conosce un modo per ovviare a questo inconveniente, senza modificare profondamente il programma?

    E un errore come lo gestisco?
    Non dovresti gestirlo (non questo OutOfMemoryError o altri XyzError) .... è una cosa che in linea di massima non dovrebbe capitare. Se capita vuol dire che o il tuo codice fa un cattivo uso degli oggetti e della memoria (tuo baco che devi risolvere) oppure la JVM viene avviata con un "heap" massimo davvero sottodimensionato per fare quello che è sensato per il tuo programma.

    E comunque senza sapere cosa hai fatto di preciso, quali oggetti, algoritmi, strutture dati hai usato .... non si può dire nulla di più.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Beh, quando parlo di file molto grandi parlo di 100 megabyte...

    Il mio programma fa una cifratura con AES, e per importare il file usa una InputStreamReader, inserendo ogni byte appunto in un array di byte. Penso sia proprio quell'array ad assumere dimensioni troppo grandi...
    La differenza fra la genialità e la stupidità è che la genialità ha i suoi limiti.


  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Penso che la cosa migliore sia usare CipherInputStream

    CipherInputStream @ JCE

    e se cerchi con qualsiasi motore di ricerca trovi altro materiale e vari esempi di codice.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  5. #5
    Quindi se non ho capito male, è come un inputstream, solo che restituisce i dati già cifrati... ma questo che vantaggi comporterebbe per me :master:? Il file dovrebbe comunque venire inserito per intero nella memoria (anche se cifrato), prima di essere passato per il metodo che salva i byte nel nuovo file...
    La differenza fra la genialità e la stupidità è che la genialità ha i suoi limiti.


  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da furbostandby
    è come un inputstream, solo che restituisce i dati già cifrati...
    Decifra o cifra ... è configurabile in quel senso. Comunque sì, la "specializzazione" è quella.

    Originariamente inviato da furbostandby
    Il file dovrebbe comunque venire inserito per intero nella memoria (anche se cifrato), prima di essere passato per il metodo che salva i byte nel nuovo file...
    E chi l'ha detto? Tu devi leggere un file "cifrato", decifrarlo e semplicemente scrivere su un altro file il contenuto "decifrato"? Ripeto: non è mica necessario tenere tutto in memoria!

    Leggi a blocchi di tot byte (es. 1024) dal CipherInputStream e li "butti" sul nuovo file.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  7. #7
    Sì funziona, ma solo parzialmente , infatti succede una cosa strana: nel file di destinazione scrive correttamente 512 byte, poi 512 caratteri nulli, poi altri 512 corretti, altri 512 nulli e così via...

    codice:
    /*
    tipi relativi agli oggetti usati nel codice (per comodità non ho postato i comandi che li instanziano)
    
    encryptedFile = File (di output)
    cipher = Cipher
    input = FileInputStream
    output = FileOutputStream
    */
    
    CipherInputStream stream=new CipherInputStream(input,cipher);
    FileOutputStream output=new FileOutputStream(encryptedFile,true);
    byte[] streamBytes=new byte[1024];
    int readed;
    do
    {
    readed=stream.read(streamBytes,0,1023);
    output.write(streamBytes);
    }
    while(readed>0);
    input.close();
    output.close();
    Intanto grazie

    Ciao
    La differenza fra la genialità e la stupidità è che la genialità ha i suoi limiti.


  8. #8
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    [QUOTE]Originariamente inviato da furbostandby
    codice:
    do
    {
    readed=stream.read(streamBytes,0,1023);
    output.write(streamBytes);
    }
    while(readed>0);
    No, semmai:

    codice:
    do
    {
    readed=stream.read(streamBytes);       // che sarebbe equivalente a read(streamBytes, 0, streamBytes.length)
    output.write(streamBytes, 0, readed);
    }
    while(readed>0);
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  9. #9
    Utente di HTML.it L'avatar di desa
    Registrato dal
    Oct 2008
    Messaggi
    569
    Ho davvero letto "readed"???

  10. #10
    Originariamente inviato da desa
    Ho davvero letto "readed"???
    oops... strafalcione!
    La differenza fra la genialità e la stupidità è che la genialità ha i suoi limiti.


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.