Deserializo un objeto de un archivo que tiene un tamaño de 350 KB y lleva bastante tiempo. Mi TA de informática me dijo que hay una forma de usar un lector de almacenamiento intermedio junto con ObjectInputStream para aumentar el rendimiento. Sin embargo, no puedo encontrar nada sobre esto en Google.¿Existe un ObjectInputStream almacenado en búfer?
Respuesta
Utiliza la decoración para proteger la secuencia de entrada. Al igual que este
InputStream in = ...; // your underlying stream (e.g. FileInputStream)
ObjectInputStream oin = new ObjectInputStream(new BufferedInputStream(in));
Esto asegurará que cada llamada a ObjectInputStream no llama la corriente de base in
, tales como llamada al sistema de archivos de lectura del sistema operativo. En cambio, cada llamada va a la secuencia de entrada almacenada en el búfer, que capta y almacena en caché los bloques de datos (8K por defecto), y lee de eso. Esto es más rápido, ya que la lectura de la secuencia ahora es una llamada a un método local en Java, y la sobrecarga de llamada a un método de una llamada al sistema se encuentra con menos frecuencia. La coherencia de caché y las optimizaciones de JIT también entran en juego para mejorar el rendimiento.
Sin embargo, usted puede utilizar ObjectInputStream (InputStream in) constructor
Para crear el objeto tamponada insumo de factor corriente que pasa por BufferedInputStream como argumento del constructor anteriormente.
Aquí es ejemplo para la lectura de los objetos serializados de archivo:
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();
}
}
Pedido siguiente enlace:
http://java.sun.com/docs/books/performance/1st_edition/html/JPIOPerformance.fm.html
Podría querer un 'try {' después de la línea de declaración 'file', y un'} finally {file.close(); } 'en lugar de' in.close(); '. –
Este código definitivamente no compilará, ya que en el bloque 'finally',' file' no está declarado. – uckelman
@uckelman Ahora el código debería compilarse. Anteriormente había ingresado el código de ref, pero no lo probé/compilé. – YoK
- 1. Error ObjectInputStream
- 2. ¿Cómo verificar si existe un procedimiento almacenado?
- 3. Java ObjectInputStream colgando
- 4. ObjectInputStream (socket.getInputStream()); no funciona
- 5. Verifica si existe proc almacenado en DB?
- 6. Java - Escuchando un socket con ObjectInputStream
- 7. Cómo detectar si ya existe un procedimiento almacenado
- 8. ¿Existe un "estoy seguro" para la ejecución del procedimiento almacenado? :)
- 9. ObjectInputStream - ¿Cómo esperar para obtener nuevos datos?
- 10. Java Serializable, ObjectInputstream, E/S sin bloqueo
- 11. Procedimiento almacenado SQL SI EXISTE ACTUALIZAR EL RESTO INSERT
- 12. Ejecutar un procedimiento almacenado dentro de un procedimiento almacenado
- 13. ¿Por qué la salida estándar del subproceso (redirigido a un archivo sin búfer) se almacena en el búfer?
- 14. accediendo a un búfer de vértices (matriz de búfer) en un sombreador de fragmentos
- 15. Emacs - Varias columnas un búfer
- 16. Búfer binario en Python
- 17. Llamar a un procedimiento almacenado en un procedimiento almacenado en MySQL
- 18. ¿Doble búfer en WPF?
- 19. (java) ObjectInputStream deserialización de la versión incorrecta del objeto
- 20. No se puede crear ObjectInputStream con InputStream para un socket Bluetooth en la plataforma Android
- 21. Conseguir un búfer en un stringstream en representación hexadecimal:
- 22. Escribir un búfer binario en un archivo en Python
- 23. Un diccionario almacenado eficientemente. ¿Esta estructura de datos existe y cómo se llama?
- 24. Cómo llamar a un procedimiento almacenado desde otro procedimiento almacenado?
- 25. Determinar cuándo un video ha completado el almacenamiento en búfer
- 26. ¿Cómo editas un procedimiento almacenado en MySQL?
- 27. ¿Cómo elimino un procedimiento almacenado en postgresql?
- 28. ¿Cómo selecciono un procedimiento almacenado en Sybase?
- 29. Seleccionar y actualizar en un procedimiento almacenado
- 30. ¿Puedo tener un parámetro OUTPUT opcional en un procedimiento almacenado?
'ObjectInputStream' utiliza un buffer de 1k al menos parte del tiempo, por lo que esta sugerencia no tendrá un efecto tan dramático como se sugiere aquí. – EJP
@EJP ¿Esta solución será lo suficientemente eficiente para leer Objetos y líneas como el método 'readLine()' en 'BufferedReader'? –