Visualizzazione dei risultati da 1 a 10 su 18

Discussione: Errore I/O

Hybrid View

  1. #1
    Quote Originariamente inviata da Alex'87 Visualizza il messaggio
    Che modo inefficiente di estrarre uno zip... non puoi leggere a buffer?
    Come dicevo, sto giusto iniziando.
    Va beh, immagino di poter cominciare con:

    codice:
    BufferedReader br = new BufferedReader(new InputStreamReader(in));
    E poi, nel ciclo for avrò
    codice:
    ch=br.read()
    Sbaglio?

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Quote Originariamente inviata da Squaloattacca Visualizza il messaggio
    Sbaglio?
    La risposta alla domanda "Sbaglio?" è "sì"... BufferedReader è un aggeggo che serve a leggere stream di "caratteri". Quello che devi fare tu è leggere stream di byte (quindi, byte secchi, senza alcuna interpretazione di caratteri, che potrebbe falsare la lettura).

    Quello che intendeva dire Alex è che non ha molto senso leggere (e scrivere) un byte alla volta... conviene usare un array di byte (di una certa dimensione, generalmente multipli di 1024) in modo da "velocizzare" la lettura.


    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
    Quote Originariamente inviata da LeleFT Visualizza il messaggio
    La risposta alla domanda "Sbaglio?" è "sì"... BufferedReader è un aggeggo che serve a leggere stream di "caratteri". Quello che devi fare tu è leggere stream di byte (quindi, byte secchi, senza alcuna interpretazione di caratteri, che potrebbe falsare la lettura).

    Quello che intendeva dire Alex è che non ha molto senso leggere (e scrivere) un byte alla volta... conviene usare un array di byte (di una certa dimensione, generalmente multipli di 1024) in modo da "velocizzare" la lettura.


    Ciao.
    Ho notato: mi corrompe i file XD sto consultando la documentazione per trovare la soluzione. In base a cosa decido la dimensione del buffer?

    EDIT: per il momento sto adottando la seguente:
    codice:
    BufferedInputStream br = new BufferedInputStream(in);
    BufferedOutputStream bw = new BufferedOutputStream(out);
    dove in e out sono definiti nel codice originario. Non so che fare a quel ciclo for adesso
    Ultima modifica di Squaloattacca; 28-07-2014 a 14:01

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,328
    Quote Originariamente inviata da Squaloattacca Visualizza il messaggio
    Ho notato: mi corrompe i file XD sto consultando la documentazione per trovare la soluzione. In base a cosa decido la dimensione del buffer?
    Generalmente "a tuo gusto". Diciamo che solitamente si vedono in giro valori che vanno dai 4 agli 8 KB (quindi 4 * 1024 o 8 * 1024), per tenersi "leggeri".


    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

  5. #5
    Quote Originariamente inviata da LeleFT Visualizza il messaggio
    Generalmente "a tuo gusto". Diciamo che solitamente si vedono in giro valori che vanno dai 4 agli 8 KB (quindi 4 * 1024 o 8 * 1024), per tenersi "leggeri".


    Ciao.
    Perfetto. Ora non mi resta che risolvere l'enigma di quel ciclo

  6. #6
    Ok, per gli utenti scrivo come ho pensato di risolvere. Ora l'ultima parte appare così:
    codice:
    InputStream in = Zf.getInputStream(one);
                BufferedInputStream br = new BufferedInputStream(in);
                FileOutputStream out = new FileOutputStream(one.getName());
                BufferedOutputStream bw = new BufferedOutputStream(out);
                byte [] ba = new byte [4 * 1024];
                int bubi = -7;
                while ((bubi = br.read(ba))>0) {
                    bw.write(ba, 0, bubi);
                }
                bw.flush();
                bw.close();
                br.close();
    Sembra funzionare a meraviglia, e spero che il codice sia buono

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 © 2026 vBulletin Solutions, Inc. All rights reserved.