java serialization filenames serializable

java - Extensión de archivo para un objeto serializado



serialization filenames (1)

".ser" es una opción razonable para el sufijo de archivo - http://www.file-extensions.org/ser-file-extension

Sin embargo, podría argumentar que no importa mucho el sufijo que use ... siempre y cuando no coincida con otros sufijos de aplicaciones de uso común.

Un archivo de objeto serializado Java solo puede ser leído (de manera normal) por una aplicación Java que tiene las clases relevantes en su classpath. Un sufijo ".ser" de talla única no proporciona pistas sobre cuáles podrían ser esas clases y dónde debería encontrarlas el marco de inicio de una aplicación. Por lo tanto, no podrá configurar una asociación de archivos al estilo de Windows para proporcionar el inicio de la aplicación con un doble clic.

¿Hay alguna manera de ver o editar el archivo ser?

Posiblemente, pero con gran dificultad, y solo bajo ciertas condiciones.

El contenido del archivo es altamente dependiente de la clase que fue serializada. Ahora es posible determinar cuál es el nombre de esa clase y (en algunos casos) los nombres y tipos de los campos serializados. Sin embargo, si la clase utiliza una serialización / externalización personalizada, la representación será un blob opaco de datos binarios sin pistas en el archivo sobre cómo decodificarlo. El problema del blob opaco es bastante común porque muchas clases importantes en la biblioteca de clases de Java SE utilizan una serialización personalizada ... por eficiencia ... y también muchas clases de aplicaciones.

El otro enfoque posible es encontrar los archivos .class para todas las clases mencionadas en el archivo .ser, deserializar los objetos y usar la reflexión para acceder a los campos de los objetos deserializados. Incluso podrías modificarlos y reserializarlos. Sin embargo, si no tiene las versiones correctas de todos los archivos .class, esto no es un arranque.

¿Qué extensión de archivo sería más adecuada al guardar un objeto Serializable en el disco?

FileOutputStream fos = null; ObjectOutputStream out = null; try { fos = new FileOutputStream(filename); out = new ObjectOutputStream(fos); out.writeObject(mySerializableObject); } catch (IOException ex) { ex.printStackTrace(); } finally { IOUtils.closeQuietly(out); }