{"id":2335,"date":"2016-02-22T06:33:02","date_gmt":"2016-02-22T05:33:02","guid":{"rendered":"http:\/\/karstieltopia.com\/?p=2335"},"modified":"2016-02-22T06:33:02","modified_gmt":"2016-02-22T05:33:02","slug":"como-comprimir-en-java","status":"publish","type":"post","link":"http:\/\/karstieltopia.com\/programacion\/java\/como-comprimir-en-java\/","title":{"rendered":"Como comprimir en Java"},"content":{"rendered":"
Una realidad de\u00a0este mundo es que el tama\u00f1o es muy importante y, aunque generalmente toda la gente piensa que cuanto m\u00e1s grande mejor, a veces necesitamos cosas peque\u00f1as porque el espacio disponible en el mundo es limitado y, por eso, vamos a ver como comprimir en Java.<\/p>\n
\n<\/p>\n
La realidad es que es muy, pero que muy sencillo comprimir en Java. Solamente necesitas saber que un “deflater” sirve para comprimir algo (ese algo puede ser un fichero, un String o cualquier cosa que pase por alg\u00fan tipo de memoria).<\/p>\n
La mejor manera de ver como funciona es con un ejemplo, y por eso os voy a ense\u00f1ar un peque\u00f1o ejemplo de como comprimir en Java un fichero externo:<\/p>\n
public void createCompressFile (String filename) throws Exception {\r\n\t\tFileInputStream fis = new FileInputStream(filename);\r\n\t\tFileOutputStream fos = new FileOutputStream(filename + \".compress\");\r\n\t\tDeflaterOutputStream dos = new DeflaterOutputStream(fos);\r\n\t\tdos.write(IOUtils.toByteArray(fis));\r\n\t\tdos.close();\r\n}<\/pre>\n\u00bfA qu\u00e9 es bastante sencillo? La funci\u00f3n recibe un nombre de archivo como entrada, abre un FileInputStream a un fichero con ese nombre y crea un FileOutputStream a la salida (que es el nombre de entrada m\u00e1s “.compress”).<\/p>\n
Ahora viene lo interesante, unimos la salida con el DeflaterOutputStream (que ser\u00e1 el que comprima los datos) y escribimos directamente el array de bytes de la entrada a la salida a trav\u00e9s de este DeflaterOutputStream. Con esto ya tenemos los datos comprimidos en la salida.<\/p>\n
Finalmente solo tienes que cerrar el output stream y ya estar\u00e1 todo listo.<\/p>\n
Nota:<\/strong>\u00a0Recuerda que esto es solamente un ejemplo. Deber\u00edamos controlar el nombre de entrada, ver que existe, manejar las excepciones, etc.<\/p>\n
Vale, ya tenemos el fichero creado con un tama\u00f1o menor pero alg\u00fan d\u00eda querr\u00e1s tenerlo en su tama\u00f1o original. Para ello solo tendr\u00edas que hacer algo como lo del siguiente ejemplo:<\/p>\n
Vale, ya tenemos un fichero peque\u00f1o pero alg\u00fan d\u00eda querr\u00e1s utilizarlo y para eso tendr\u00e1 que volver a recuperar su tama\u00f1o original. Para ello tendr\u00e1s que hacer algo como lo que se muestra en el siguiente ejemplo:<\/p>\n
public void createUncompressFile (String oldFilename, String newFilename) throws Exception {\r\n\t\tFileInputStream fis = new FileInputStream(oldFilename);\r\n\t\tFileOutputStream fos = new FileOutputStream(newFilename);\r\n\t\tInflaterInputStream iis = new InflaterInputStream(fis);\r\n\t\tbyte[] compressedFileBuffer = IOUtils.toByteArray(iis);\r\n\t\tfos.write(compressedFileBuffer);\r\n\t\tfos.close();\r\n}<\/pre>\nComo puedes ver, el procedimiento es muy similar al anterior.<\/p>\n
\n
- Primero establecemos la entrada y salida.<\/li>\n
- Unimos la entrada con el “inflater” (\u00a1lo queremos de nuevo grande!)<\/li>\n
- Convertimos el inflater stream a un array de bytes<\/li>\n
- Escribimos el array de bytes directamente en la salida<\/li>\n
- Y ta chaan, ya tenemos el archivo generado, con su tama\u00f1o original y ya solo falta cerrarlo.<\/li>\n<\/ul>\n
Nota:<\/strong>\u00a0De la misma manera que coment\u00e9 en la nota anterior… esto es solamente un ejemplo y tendr\u00eda que ser mejorado. \u00a1\u00a1\u00a1No lo pongas directamente en producci\u00f3n!!!<\/p>\n","protected":false},"excerpt":{"rendered":"
Una realidad de\u00a0este mundo es que el tama\u00f1o es muy importante y, aunque generalmente toda la gente piensa que cuanto m\u00e1s grande mejor, a veces necesitamos cosas peque\u00f1as porque el espacio disponible en el mundo es limitado y, por eso, vamos a ver como comprimir en Java.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"spay_email":"","jetpack_publicize_message":"Como comprimir en Java","jetpack_is_tweetstorm":false},"categories":[22],"tags":[984,982,983],"jetpack_featured_media_url":"","jetpack_publicize_connections":[],"yoast_head":"\n
Como comprimir en Java - Karstieltopia<\/title>\n\n\n\n\n\n\n\n\n\n\n\n\n\n