Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    Leggere un txt di grosse dimensioni

    Ciao a tutti,
    ho un piccolo problema. Devo leggere un file di testo di grosse dimensioni (parliamo di 5 GB circa). Al momento sto usando il "readLine" di "BufferedReader". Volevo sapere, esiste qualche metodo più performante per evitare eventuali "Out of Memory", oppure vado bene su questa strada?

    Grazie mille

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da graydiamond Visualizza il messaggio
    ho un piccolo problema. Devo leggere un file di testo di grosse dimensioni (parliamo di 5 GB circa). Al momento sto usando il "readLine" di "BufferedReader". Volevo sapere, esiste qualche metodo più performante per evitare eventuali "Out of Memory", oppure vado bene su questa strada?
    Se leggi "a righe" con il readLine() di BufferedReader, gli eventuali problemi di memoria (ovvero un possibile e nefasto OutOfMemoryError) NON derivano dall'uso di BufferedReader/readLine() in sé MA da come/dove usi le righe.

    Se es. le collezioni tutte in un List ... allora sì il problema di memoria ci può essere eccome! Quindi semmai chiarisci COME usi le righe e per farci cosa.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  3. #3
    grazie per la risposta Andrea, non uso mappe o liste (quindi su questo non avrei problemi), però il file letto non resta in memoria sulla jva virtual machine?

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,254
    Quote Originariamente inviata da graydiamond Visualizza il messaggio
    non uso mappe o liste (quindi su questo non avrei problemi), però il file letto non resta in memoria sulla jva virtual machine?
    Quando si fanno valutazioni di questo tipo, bisogna verificare che cosa si fa con i dati, ovvero se si "accumulano" dati in memoria in quantità proporzionale/paragonabile a quanto arriva in ingresso (es. da un file).

    BufferedReader ha solo un piccolo array char[] di "buffer" interno di dimensione fissa (per default 8192 char ma si può esplicitare la dimensione) e legge di più di quanto serve perché appunto "bufferizza" i dati in modo da fare meno letture dallo stream sottostante. Ma BufferedReader NON accumula nulla di più del suo buffer interno. Quindi NON è lui di per sé una causa di problemi di occupazione della memoria.

    Se tu sei sicuro di non accumulare le righe (o dati estratti/derivati dalle righe) in memoria all'interno di liste, mappe, oggetti, strutture dati ecc..., allora non c'è da preoccuparsi sulla questione della memoria.
    Ultima modifica di andbin; 07-05-2020 a 13:52
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    Java Versions Cheat Sheet

  5. #5
    Grazie Andrea per la tua spiegazione

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