Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Sony INZONE H6 Air: il primo headset open-back di Sony per giocatori
Sony INZONE H6 Air: il primo headset open-back di Sony per giocatori
Il primo headset open-back della linea INZONE arriva a 200 euro con driver derivati dalle cuffie da studio MDR-MV1 e un peso record di soli 199 grammi
Nutanix cambia pelle: dall’iperconvergenza alla piattaforma full stack per cloud ibrido e IA
Nutanix cambia pelle: dall’iperconvergenza alla piattaforma full stack per cloud ibrido e IA
Al .NEXT 2026 di Chicago, Nutanix ha mostrato quanto sia cambiata: una piattaforma software che gestisce VM, container e carichi di lavoro IA ovunque, dall’on-premise al cloud pubblico. Con un’esecuzione rapidissima sulle partnership e sulla migrazione da VMware
Recensione Xiaomi Pad 8 Pro: potenza bruta e HyperOS 3 per sfidare la fascia alta
Recensione Xiaomi Pad 8 Pro: potenza bruta e HyperOS 3 per sfidare la fascia alta
Xiaomi Pad 8 Pro adotta il potente Snapdragon 8 Elite all'interno di un corpo con spessore di soli 5,75 mm e pannello LCD a 144Hz flicker-free, per un tablet che può essere utilizzato con accessori dedicati di altissima qualità. Fra le caratteristiche esclusive, soprattutto per chi intende usarlo con la tastiera ufficiale, c'è la modalità Workstation di HyperOS 3, che trasforma Android in un sistema operativo con interfaccia a finestre
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 04-03-2004, 12:42   #1
Frank1962
Senior Member
 
L'Avatar di Frank1962
 
Iscritto dal: Sep 2001
Città: de_legato
Messaggi: 792
[JAVA]utilizzo classe BufferReader

devo leggere un file di testo che contiene tot righe di testo; per leggere ogni riga uso il metodo .readline della classe bufferreader: il problema sorge quando voglio leggere *tutte" le righe di testo contenute nel file .......che ciclo devo utilizzare e sopratutto qualche condizione?

nei metodi della classe BufferReader non ho trovato nulla che mi potesse indicare l'EOF!

Codice:
File aFile = new File("C:\\file.bin");  <--- file da leggere


try { in = new FileInputStream (aFile); } catch(Exception e) { } <--- ottengo lo Stream (non quello della valve! lol)


BufferedReader d = new BufferedReader(new InputStreamReader(in)); <--- il buffer per leggere il testo


string = d.readLine(); <--- metodo per leggere una singola riga
ciao e grazie



ps: secondo voi questo tipo di lettura di un file di testo è efficente o c'è qualcosa di meglio?
__________________
----------------------------------------------
File reality.sys corrupted, Reboot Universe? Y/N
----------------------------------------------
Frank1962 è offline   Rispondi citando il messaggio o parte di esso
Old 04-03-2004, 13:30   #2
recoil
Senior Member
 
L'Avatar di recoil
 
Iscritto dal: Jul 2002
Città: Milano
Messaggi: 19149
tu continua a leggere il file finché non arriva l'eccezione IOException
a quel punto sai che il file è finito
recoil è offline   Rispondi citando il messaggio o parte di esso
Old 04-03-2004, 13:35   #3
RaNd0m
Member
 
Iscritto dal: Sep 2003
Città: Garlasco (PV)
Messaggi: 71
string = d.readLine();
while (string!=null) {leggi il file }

.......io ho usavo questo ( mi sembra )

cmq dovresti mettere tutto in un array di string
RaNd0m è offline   Rispondi citando il messaggio o parte di esso
Old 04-03-2004, 14:40   #4
gabriele81
Senior Member
 
L'Avatar di gabriele81
 
Iscritto dal: Dec 2001
Città: Roma
Messaggi: 542
Quote:
Originariamente inviato da RaNd0m
string = d.readLine();
while (string!=null) {leggi il file }

.......io ho usavo questo ( mi sembra )

cmq dovresti mettere tutto in un array di string
Esatto, se il file è finito il metodo readLine() ritorna NULL.
__________________
Il 90% dei problemi di un computer si trova tra la tastiera e la sedia.
XP2500+@3200+|A7N8X Deluxe|1,25 GB DDR400|Radeon 9550|HD 160+320 GB SATA|WinXP Pro|Fastweb 6 Mb/s
gabriele81 è offline   Rispondi citando il messaggio o parte di esso
Old 04-03-2004, 14:58   #5
recoil
Senior Member
 
L'Avatar di recoil
 
Iscritto dal: Jul 2002
Città: Milano
Messaggi: 19149
Quote:
Originariamente inviato da gabriele81
Esatto, se il file è finito il metodo readLine() ritorna NULL.
è vero, non so perché non mi è venuto in mente subito
del resto ho usato la bufferedreader praticamente solo per le socket quindi c'era l'abitudine a usare le eccezioni
recoil è offline   Rispondi citando il messaggio o parte di esso
Old 04-03-2004, 19:25   #6
PGI
Bannato
 
L'Avatar di PGI
 
Iscritto dal: Nov 2001
Città: Verona
Messaggi: 1086
Re: [JAVA]utilizzo classe BufferReader

Quote:
Originariamente inviato da Frank1962
ps: secondo voi questo tipo di lettura di un file di testo è efficente o c'è qualcosa di meglio?
I FileChannel sono dichiarati "più meglio del meglio", però se il file è piccolo la differenza non penso si veda.

Codice:
import java.io.*;
import java.nio.*;
import java.nio.channels.*;
import java.nio.charset.*;

public class NIOReader { 	
	public static void main(String[] args) {
		try {
			StringBuffer text = new StringBuffer();
			FileChannel inChannel = new FileInputStream("z:/prova.txt").getChannel();
			ByteBuffer buffer = ByteBuffer.allocate(1024);
			Charset charset = Charset.forName("ISO-8859-1");
			CharsetDecoder charsetDecoder = charset.newDecoder();
			while( inChannel.read(buffer) != -1 ) {
				buffer.flip();
				text.append(charsetDecoder.decode(buffer).toString());
				buffer.clear();
			}
			inChannel.close();
			System.out.println(text);
		} catch(IOException e) {
			e.printStackTrace(System.err);
			System.out.println("End of stack trace");
		}
		System.exit(0);
	}
}
PGI è offline   Rispondi citando il messaggio o parte di esso
Old 05-03-2004, 09:23   #7
Frank1962
Senior Member
 
L'Avatar di Frank1962
 
Iscritto dal: Sep 2001
Città: de_legato
Messaggi: 792
grazie PGI!! ...in effetti quel codice riuslta essere moolto + efficente nella lettura di file! ....però quando tento di andare a caricare file abbastanza grossi (30-40mb) mi da un errore "java.lang.OutOfMemoryError" <--- come faccio quindi a impostare la jvm per fargli utilizzare + ram ?

ciao e grazie!
__________________
----------------------------------------------
File reality.sys corrupted, Reboot Universe? Y/N
----------------------------------------------
Frank1962 è offline   Rispondi citando il messaggio o parte di esso
Old 05-03-2004, 10:40   #8
cn73
Senior Member
 
L'Avatar di cn73
 
Iscritto dal: Jul 1999
Città: Torino
Messaggi: 2221
I parametri sono da impostare al momento del lancio della jvm:

http://java.sun.com/j2se/1.4.2/docs/...dows/java.html

In special modo

Quote:
-Xmsn
Specify the initial size, in bytes, of the memory allocation pool. This value must be a multiple of 1024 greater than 1MB. Append the letter k or K to indicate kilobytes, or m or M to indicate megabytes. The default value is 2MB. Examples:
-Xms6291456
-Xms6144k
-Xms6m
Devi comunque tenere conto dei limiti fisici della memoria, per cui è conveniente(anzi d'obbligo) implementare un algoritmo che divida in n blocchi il file da leggere.
cn73 è offline   Rispondi citando il messaggio o parte di esso
Old 05-03-2004, 10:41   #9
PGI
Bannato
 
L'Avatar di PGI
 
Iscritto dal: Nov 2001
Città: Verona
Messaggi: 1086
da linea di comando puoi usare l'opzione -XmxN, dove N indica la quantità di memoria massima di allocazione che la jvm può usare (default 64megabyte). N può essere espresso in kilobyte o megabyte, di solito si usano i megabyte.

es.

java -Xmx256m Programma.java -> la jvm "arriva" fino a 256megabyte

Puoi anche stabilire la dimensione iniziale della memoria di allocazione (default 2megabyte)

java -Xms16m -Xmx256m Programma.java -> la jvm parte con 16megabyte e arriva fino a 256.

Questa seconda opzione si può usare nel caso in cui il programma richieda già all'avvio un quantitiativo di memoria più ampio del normale e dovrebbe garantire una partenza un po' più rapida.

Se stai impacchettando l'applicazione in un Jar eseguibile, puoi definire direttamente le opzioni che verranno usate dalla macchina virtuale quando eseguirà l'applicazione usando le opzioni -J-

es.

jar -J-Xmx256m -mcf blablabla...

crea un jar che sarà eseguito passando alla macchina virtuale l'opzione -Xmx256m.

Tutte le opzioni -X sono opzioni della macchina virtuale HotSpot di Sun.

Ciao.
PGI è offline   Rispondi citando il messaggio o parte di esso
Old 05-03-2004, 10:43   #10
PGI
Bannato
 
L'Avatar di PGI
 
Iscritto dal: Nov 2001
Città: Verona
Messaggi: 1086
cn73, m'hai fregato per un minuto!
PGI è offline   Rispondi citando il messaggio o parte di esso
Old 05-03-2004, 11:22   #11
cn73
Senior Member
 
L'Avatar di cn73
 
Iscritto dal: Jul 1999
Città: Torino
Messaggi: 2221
Quote:
Originariamente inviato da PGI
cn73, m'hai fregato per un minuto!

cn73 è offline   Rispondi citando il messaggio o parte di esso
Old 06-03-2004, 02:40   #12
Frank1962
Senior Member
 
L'Avatar di Frank1962
 
Iscritto dal: Sep 2001
Città: de_legato
Messaggi: 792
grazie raga .....adesso ho risolo anche questo problema! però ho notato che utilizzando il codice di PGI mi trovo a essere limitato dalla grandezza del buffer; mi spiego meglio, essendo le righe di testo nel file di lunghezza differente mi ritrovo con "oggetti" String di testo che all'ultima riga di solito viene spezzato per poi essere salvato nell'oggetto successivo ...........c'è la possibilità di aggirare questo problema e avere le righe complete!?

ciao e grazie
__________________
----------------------------------------------
File reality.sys corrupted, Reboot Universe? Y/N
----------------------------------------------
Frank1962 è offline   Rispondi citando il messaggio o parte di esso
Old 06-03-2004, 11:19   #13
PGI
Bannato
 
L'Avatar di PGI
 
Iscritto dal: Nov 2001
Città: Verona
Messaggi: 1086
Per leggere una linea per volta personalmente ti consiglio di restare sul buon vecchio BufferedReader, forse è meno efficiente però il codice che salta fuori è 1000 volte più "rapido da leggere" (e non è una cosa da buttar via).

Con un CharsetDecoder il carattere "new line" è trattato come un carattere qualsiasi, per risolvere dovresti aggiungere un ciclo di "parsing" del testo letto, o tutto quanto, e quindi dopo aver creato una stringa che può anche essere piuttosto grossa, oppure all'interno del ciclo di lettura: togli l' "append", riversi il contenuto del buffer in una stringa intermedia e la parzializzi cercando i caratteri "\n".

Così fancendo sarebbe ancora più efficiente di un bufferedreader? Non lo so, bisognerebbe provare. Sicuramente il codice è un po' più incasinato.
PGI è offline   Rispondi citando il messaggio o parte di esso
Old 07-03-2004, 01:25   #14
Frank1962
Senior Member
 
L'Avatar di Frank1962
 
Iscritto dal: Sep 2001
Città: de_legato
Messaggi: 792
Quote:
Originariamente inviato da PGI
....bisognerebbe provare. Sicuramente il codice è un po' più incasinato.
dici? .....guarda un pò questo codice che ho buttato giù, come ti sembra?

Codice:
import java.io.*;
import java.nio.*;
import java.nio.channels.*;
import java.nio.charset.*;



public class ReadFile {


  static String text = new String("");
  
  static Charset charset = Charset.forName("ISO-8859-1");
  static CharsetDecoder charsetDecoder = charset.newDecoder();

  static File aFile = new File("C:\\file.bin");
  static FileChannel inChannel;
  static ByteBuffer buffer;

  static {
       try { 
         inChannel = new FileInputStream(aFile).getChannel(); 
      } catch(Exception e) { }
  }


  public ReadFile() {
    
    buffer = ByteBuffer.allocate((int)aFile.length());
    
    try {
      
      while( inChannel.read(buffer) != -1 ) {
                              buffer.flip();
                              text = (charsetDecoder.decode(buffer)).toString();
                              buffer.clear();
                      } 
                      inChannel.close();
                      
                    } catch(IOException e) {
                      e.printStackTrace(System.err);
                      System.out.println("End of stack trace"); }

    splitting();
  }
  
  
  public void splitting() {
    String[] array = text.split("\n");
    System.out.println("^_^");
  }
  

}
è valida come soluzione secondo te?

ciao



edit ps: ho separato in un metodo a se stante le righe di codice per splittare così da poter eventualmente modificare lo String text completo in altri modi.
__________________
----------------------------------------------
File reality.sys corrupted, Reboot Universe? Y/N
----------------------------------------------

Ultima modifica di Frank1962 : 07-03-2004 alle 01:29.
Frank1962 è offline   Rispondi citando il messaggio o parte di esso
Old 07-03-2004, 18:20   #15
PGI
Bannato
 
L'Avatar di PGI
 
Iscritto dal: Nov 2001
Città: Verona
Messaggi: 1086
Per funzionare dovrebbe funzionare, bisogna vedere se funziona "meglio".

Prima carichi la stringa in un buffer, poi carichi il contenuto in un array, alla fine potresti ritrovarti con un po' di duplicati.

Ma la cosa è tutta da vedere, perchè il motore di gestione delle stringhe in Java potrebbe anche offrire la possibilità di rimuovere i duplicati usando il metodo "intern()" della classe String, che rimpiazza la stringa generata con un riferimento ad una delle stringhe nel pool in memoria. Forse si potrebbe parzializzare tutto il testo in tanti "token" quante sono le singole parole e richiamare "intern()" su ciascuno di essi. Ma è un'idea un po' così. E poi dipende dalla lunghezza del testo, per 100kb non andrei ad arrovellarmi troppo sulla questione, per 40megabyte però...

Ciao.
PGI è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Sony INZONE H6 Air: il primo headset open-back di Sony per giocatori Sony INZONE H6 Air: il primo headset open-back d...
Nutanix cambia pelle: dall’iperconvergenza alla piattaforma full stack per cloud ibrido e IA Nutanix cambia pelle: dall’iperconvergenza alla ...
Recensione Xiaomi Pad 8 Pro: potenza bruta e HyperOS 3 per sfidare la fascia alta Recensione Xiaomi Pad 8 Pro: potenza bruta e Hyp...
NZXT H9 Flow RGB+, Kraken Elite 420 e F140X: abbiamo provato il tris d'assi di NZXT NZXT H9 Flow RGB+, Kraken Elite 420 e F140X: abb...
ASUS ROG Swift OLED PG34WCDN recensione: il primo QD-OLED RGB da 360 Hz ASUS ROG Swift OLED PG34WCDN recensione: il prim...
Ecovacs presenta la gamma 2026: paviment...
Efficienza energetica fino a 2.000 volte...
Lenovo 360: il programma di canale dell'...
Appena 10.000 qubit per rompere la critt...
Analisi dei transistor durante il funzio...
Attacco informatico a Booking.com: espos...
A quattro mesi dal divieto dei social ne...
NVIDIA GeForce RTX 5060 e 5060 Ti: in ar...
Rebellions, Arm e SK Telecom, nuova alle...
Modernizzazione delle app: Red Hat OpenS...
Nel mirino di Google c'è il back ...
PRAGMATA in bundle con GeForce RTX 5000:...
Le novità MOVA per il 2026: robot e impi...
Windows, stop all'attivazione telefonica...
ASUS porta la serie TUF nel formato Mini...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 05:26.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v