Sto deserializzando un oggetto da un file che ha una dimensione di 350 KB e richiede molto tempo. La mia informatizzazione TA mi ha detto che esiste un modo per utilizzare un lettore Buffered insieme a ObjectInputStream per aumentare notevolmente le prestazioni. Tuttavia non riesco a trovare nulla su questo su Google.Esiste un oggetto ObjectInputStream con buffer?
risposta
Si utilizza la decorazione per memorizzare il flusso di input. Ti piace questa
InputStream in = ...; // your underlying stream (e.g. FileInputStream)
ObjectInputStream oin = new ObjectInputStream(new BufferedInputStream(in));
Questo farà sì che ogni chiamata a ObjectInputStream non chiama il flusso di base in
, come chiamata di sistema di file di lettura del sistema operativo. Invece, ogni chiamata va al flusso di input bufferizzato, che recupera e memorizza nella cache blocchi di dati (8K di default), e legge da quello. Questo è più veloce, dal momento che la lettura dallo stream è ora una chiamata di metodo locale in java e il metodo di chiamata overhead di una chiamata di sistema si verifica meno spesso. Anche la coerenza della cache e le ottimizzazioni JIT entrano in gioco per migliorare le prestazioni.
No, ma è possibile utilizzare ObjectInputStream (InputStream in) costruttore
Per creare l'oggetto tamponata gli input flusso passando BufferedInputStream come argomento al costruttore sopra.
Ecco ad esempio per la lettura di oggetti serializzati dal file:
InputStream file = null;
try {
file = new FileInputStream("Out.test");
InputStream buffer = new BufferedInputStream(file);
ObjectInputStream in = new ObjectInputStream(buffer);
vector = (Vector)in.readObject();
} catch (Exception e) {
e.printStackTrace();
} finally{
if(file != null) {
file.close();
}
}
Checkout seguente link:
http://java.sun.com/docs/books/performance/1st_edition/html/JPIOPerformance.fm.html
Potrebbe volere un 'try {' dopo la riga di dichiarazione 'file', e un'} finally {file.close(); } 'invece di' in.close(); '. –
Questo codice sicuramente non verrà compilato, poiché nel blocco 'finally',' file' non è dichiarato. – uckelman
@uckelman Ora il codice dovrebbe essere compilato. In precedenza avevo inserito il codice di riferimento ma non ho testato/compilato lo stesso. – YoK
- 1. nuova ObjectInputStream() blocchi
- 2. Perché posso leggere solo 1024 byte alla volta con ObjectInputStream?
- 3. Java ObjectInputStream sospeso
- 4. Oggetto buffer e oggetto buffer immagine in OpenCL
- 5. Quali sono le differenze tra un oggetto frame buffer e un oggetto buffer pixel in OpenGL?
- 6. ObjectInputStream - Come attendere nuovi dati?
- 7. TypeError: atteso un oggetto buffer di caratteri
- 8. Java serializzabile, ObjectInputstream, I/O non bloccante
- 9. Leggi oggetto buffer in node.js
- 10. Verifica se esiste un oggetto
- 11. Oggetto buffer circolare Obj-C, implementando uno?
- 12. python buffer di file come oggetto
- 13. Come posso verificare se esiste un buffer corrente in Emacs?
- 14. Perché non esiste un oggetto StrongReference?
- 15. Trattare con buffer char
- 16. Verificare se esiste un oggetto in VBScript
- 17. System.Security.Cryptography.CryptographicException -oggetto esiste
- 18. Utilizzo del buffer del protocollo come oggetto dati generale?
- 19. Come comprimere un buffer con zlib?
- 20. sprintf_s con un buffer troppo piccolo
- 21. causano un buffer overflow con fgets
- 22. Dillema con buffer overflow
- 23. Esiste un modo per memorizzare o materializzare un oggetto IEnumerable?
- 24. Esiste comunque lo svuotamento programmabile del buffer in log4net
- 25. Il modo più veloce per verificare se esiste un oggetto
- 26. Come gestire "query corrispondente non esiste" quando ottiene un oggetto
- 27. Java serializzazione con protocollo Buffer
- 28. come creare un readstream con un buffer utilizzando nodejs
- 29. Spostare la semantica con un puntatore a un buffer interno
- 30. Usa stencil buffer con iOS
'ObjectInputStream' utilizza un buffer 1k almeno una parte del tempo, in modo da questo suggerimento non avrà un effetto drammatico come suggerito qui. – EJP
@EJP Questa soluzione sarà abbastanza efficiente per la lettura di oggetti e anche linee come il metodo 'readLine()' in 'BufferedReader'? –