Visualizzazione dei risultati da 1 a 10 su 20

Visualizzazione discussione

  1. #3
    Quote Originariamente inviata da andbin Visualizza il messaggio
    Sì, e anche abbastanza.
    Innanzitutto utilizzando una classe di I/O in grado di fare del "buffering". Alcune varianti:

    tue scritture -> PrintStream -> BufferedOutputStream -> FileOutputStream
    oppure
    tue scritture -> BufferedWriter -> OutputStreamWriter -> FileOutputStream

    Poi se vuoi comporre una riga intera per volta, certamente non usando la concatenazione delle stringhe ma usando direttamente un StringBuffer/StringBuilder. In alternativa (avendo un "buffering" al di sotto che aiuta), scrivere direttamente i pezzetti senza comporre alcuna stringa più grande.


    Ah, e sarebbe bene fare alla fine un bel flush() e poi il close(). Entrambi sull'oggetto di I/O più "esterno" che hai in quel momento.



    Scrittura lenta: 18.74 secondi
    Scrittura veloce: 0.246 secondi



    P.S.: Più la dimensione cresce più il divario cresce, sembra impossibile!

    grazie andbin, sei il numero 1!

    Ho trovato lo script nel capitolo NIO del mio manuale ma la differenza è notevole!!!

    Ti devo chiedere 2 cose:

    1) Sapresti spiegarmi in modo semplice senza troppi giri di parole il motivo per cui il nuovo script è riesce ad essere più veloce?

    2) Con il nuovo codice si hanno dei contro oltre che dei pro?

    3) Si scrive prima nella ram e poi sul disco o direttamente sul disco con questi sistemi?

    4) Esiste qualcosa di ancora più veloce? Era questo che avevi in testa? (buttaci un occhio magari riesci a migliorarlo ancora... anche solo di qualche miliardesimo di nanosecondo... )

    Ecco il nuovo codice:

    codice:
    try (OutputStream fout = new BufferedOutputStream(
                    Files.newOutputStream(Paths.get(nome_file)))) {
                String riga = "";
                for (int i = 0; i < matrice.length; i++) {
                    riga = "";
                    for (int j = 0; j < matrice[0].length; j++) {
                        if (j < matrice[0].length - 1) {
                            riga = riga + matrice[i][j] + ",";
                        }
                        if (j == matrice[0].length - 1) {
                            riga = riga + matrice[i][j] + "\n";
                        }
                    }
                    fout.write(riga.getBytes());
                    riga = "";
                }
            } catch (InvalidPathException e) {
                System.out.println("URL scelto inesistente.");
                System.out.println("Path Error " + e);
            } catch (IOException e) {
                System.out.println("Errore nella scrittura del file .CSV");
                System.out.println("I/O Error: " + e);
            }
    lo lascio servisse a qualche altro forumisto di html.it.
    Ultima modifica di giannino1995; 21-01-2014 a 21:20
    Più pratica in futuro...

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.