Ich deserialisiere ein Objekt aus einer Datei, die 350 KB groß ist, und dauert ziemlich lange. Mein Informatik-TA hat mir gesagt, dass es einen Weg gibt, einen gepufferten Reader zusammen mit dem ObjectInputStream zu verwenden, um die Leistung erheblich zu steigern. Ich kann jedoch dazu bei Google nichts finden.Gibt es einen gepufferten ObjectInputStream?
Antwort
Sie verwenden Dekoration, um den Eingabestream zu puffern. Gefallen Sie diesen
InputStream in = ...; // your underlying stream (e.g. FileInputStream)
ObjectInputStream oin = new ObjectInputStream(new BufferedInputStream(in));
Dadurch wird sichergestellt, dass jeder Aufruf von Object ruft nicht den Basisstrom in
, wie die Datei Lese-Systemaufruf OS. Stattdessen wird jeder Aufruf an den gepufferten Eingabestream übergeben, der Datenblöcke (standardmäßig 8 KB) abruft und zwischenspeichert und von diesem liest. Dies ist schneller, da das Lesen aus dem Stream jetzt ein lokaler Methodenaufruf in Java ist und der Methodenaufruf-Overhead eines Systemaufrufs weniger häufig auftritt. Cache-Kohärenz und JIT-Optimierungen spielen ebenfalls eine Rolle bei der Verbesserung der Leistung.
Nein, aber Sie können, indem BufferedInputStream als Argument oben Konstruktor Object (Inputstream in) Konstruktor
Um gepufferte Objekt intput Stream zu erstellen verwenden.
ist hier beispielsweise für serialisierte Objekte beim Lesen von Datei:
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();
}
}
Kasse folgenden Link:
http://java.sun.com/docs/books/performance/1st_edition/html/JPIOPerformance.fm.html
Könnte einen 'try {' nach der 'file' Deklarationszeile und ein'} finally {file.close(); } 'anstelle von' in.close(); '. –
Dieser Code wird definitiv nicht kompiliert, da im 'finally' Block' Datei' nicht deklariert ist. – uckelman
@uckelman Jetzt sollte Code kompilieren. Früher hatte ich Ref-Code eingegeben, aber nicht getestet/kompiliert. – YoK
- 1. Wie spült man einen gepufferten log4j FileAppender?
- 2. java Socket ObjectInputStream
- 3. ObjectInputStream readInt() funktioniert nicht
- 4. FileInputStream und ObjectInputStream
- 5. Wie kann ich einen ObjectInputStream erhalten, der Mark/Reset unterstützt?
- 6. Gibt es einen Identitätskanal?
- 7. ObjectInputStream readobject funktioniert nicht OptionalDataException
- 8. Java ObjectInputStream wird nicht instanziiert
- 9. Unterschiede bei der Instanziierung von gepufferten Writern
- 10. Gibt es einen C++ - Decompiler?
- 11. Gibt es einen "git find"?
- 12. Gibt es einen boost :: weak_intrusive_pointer?
- 13. Gibt es einen aktualisierten 'vimtutor'?
- 14. Gibt es einen Vorlagen-Debugger?
- 15. Gibt es einen IPMI-Simulator?
- 16. Gibt es einen Go-Profiler?
- 17. Gibt es einen NHibernate Killer?
- 18. Gibt es einen PHP-Validator?
- 19. Gibt es einen besseren Austausch?
- 20. Gibt es einen C++ Almanach?
- 21. Gibt es einen log4net-Speicherappender?
- 22. Gibt es einen Silverlight Decompiler?
- 23. Gibt es einen unterhaltsamen Reiseführer?
- 24. Gibt es einen tragbaren Perl?
- 25. Gibt es einen ReST Writer?
- 26. webgl Verschieben von gepufferten Daten im Grafikkartenspeicher?
- 27. ClassCastException mit ObjectInputStream in Server-Client-Anwendung
- 28. Erstelle ein Stück gepufferten Kanal in Golang
- 29. Java serialisierbar, ObjectInputstream, nicht blockierende E/A
- 30. Gibt es einen CSS-Selektor nicht gleich?
'ObjectInputStream' verwendet ein 1k Puffer zumindest einen Teil der Zeit, so dass dieser Vorschlag wird nicht so dramatisch wirken wie hier vorgeschlagen. – EJP
@EJP Wird diese Lösung effizient genug sein, um Objekte zu lesen, sowie Zeilen wie 'readLine()' Methode in 'BufferedReader' tut? –