Dei tre
che è più preferito nella vita reale per l'I / O di file in Java e perché?
Preferisco che i canali per i dati binari siano messi in file o letti da e BufferedReader / Writer per i dati String
Dei tre
java.io usa Streams
mentre java.nio usa Channels
e buffer
, la distinzione più importante tra java.io way e java.nio è, come vengono impacchettati e trasmessi i dati.java.io con dati in streaming (un byte alla volta), mentre java.nio si occupa di dati in blocchi.
L'elaborazione dei dati da parte del blocco può essere molto più veloce dell'elaborazione da parte del byte (in streaming) ma non è così semplice come i flussi.
In queste situazioni, è meglio usare java.io way:
In queste situazioni, è meglio usare java.nio modo:
Puoi visualizzare i seguenti link per ulteriori informazioni:
which is more preferred in real life for file I/O in Java and why?
Dovrebbe davvero essere una questione di funzione piuttosto che di preferenza.
Si utilizzano Readers and Writers per dati orientati ai caratteri (che richiede codifica e decodifica), Input / OutputStreams per dati orientati ai byte e flussi binari se i dati codificano dati binari.
Si utilizzano le classi BufferedXxx se è necessario I / O alla granularità di un carattere o di un byte. Sono un modo semplice per evitare i seri problemi di prestazioni che possono verificarsi se si eseguono molte sessioni di lettura e scrittura byte-at-time.
Se si esegue solo I / O leggendo / scrivendo grandi blocchi, allora le classi BufferedXxx potrebbero effettivamente ridurre un throughput di un bit. Puoi utilizzare lettori / scrittori / stream semplici (con grandi char[]
o byte[]
buffer) o Canali e XxxBuffer. Questi ultimi sono potenzialmente più veloci, ma le API sono più scomode.
Utilizzi i canali se ti servono bassi overhead e / o fai cose specializzate come "selezionare" da più flussi, scatter / gather e accesso ai file mappati in memoria.
Come puoi vedere, le diverse API sono progettate per scopi diversi. In alcuni casi d'uso c'è sovrapposizione, in altri solo una API è adatta allo scopo.
Il problema con lo sviluppo di una "preferenza" per uno stile di I / O rispetto a un altro è che porta a software non valido; ovvero un codice che è inefficiente dove è necessaria l'efficienza I / O, o eccessivamente complicato dove l'efficienza I / O non dovrebbe essere un problema.
La risposta è "Dipende" - I / O bufferizzati, streaming, bloccanti e non bloccanti vengono tutti utilizzati per scopi diversi a seconda della concorrenza, del throughput e di altre caratteristiche delle prestazioni che stai cercando.