{"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

\"Comprimir
\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>\n

Como 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":"\nComo comprimir en Java - Karstieltopia<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"http:\/\/karstieltopia.com\/programacion\/java\/como-comprimir-en-java\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Como comprimir en Java - Karstieltopia\" \/>\n<meta property=\"og:description\" content=\"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.\" \/>\n<meta property=\"og:url\" content=\"http:\/\/karstieltopia.com\/programacion\/java\/como-comprimir-en-java\/\" \/>\n<meta property=\"og:site_name\" content=\"Karstieltopia\" \/>\n<meta property=\"article:published_time\" content=\"2016-02-22T05:33:02+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/karstieltopia.com\/wp-content\/uploads\/2016\/02\/compression-282x300.jpg\" \/>\n<meta name=\"twitter:card\" content=\"summary\" \/>\n<meta name=\"twitter:creator\" content=\"@karstiel\" \/>\n<meta name=\"twitter:site\" content=\"@karstiel\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebSite\",\"@id\":\"http:\/\/karstieltopia.com\/#website\",\"url\":\"http:\/\/karstieltopia.com\/\",\"name\":\"Karstieltopia\",\"description\":\"Programaci\\u00f3n, tecnolog\\u00eda y a\\u00f1adidos\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":\"http:\/\/karstieltopia.com\/?s={search_term_string}\",\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"es\"},{\"@type\":\"ImageObject\",\"@id\":\"http:\/\/karstieltopia.com\/programacion\/java\/como-comprimir-en-java\/#primaryimage\",\"inLanguage\":\"es\",\"url\":\"https:\/\/i2.wp.com\/karstieltopia.com\/wp-content\/uploads\/2016\/02\/compression.jpg?fit=500%2C532\",\"width\":500,\"height\":532,\"caption\":\"Comprimir en Java\"},{\"@type\":\"WebPage\",\"@id\":\"http:\/\/karstieltopia.com\/programacion\/java\/como-comprimir-en-java\/#webpage\",\"url\":\"http:\/\/karstieltopia.com\/programacion\/java\/como-comprimir-en-java\/\",\"name\":\"Como comprimir en Java - Karstieltopia\",\"isPartOf\":{\"@id\":\"http:\/\/karstieltopia.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"http:\/\/karstieltopia.com\/programacion\/java\/como-comprimir-en-java\/#primaryimage\"},\"datePublished\":\"2016-02-22T05:33:02+00:00\",\"dateModified\":\"2016-02-22T05:33:02+00:00\",\"author\":{\"@id\":\"http:\/\/karstieltopia.com\/#\/schema\/person\/3d09a55c38c7c00e78c41fa3f71a6e75\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"http:\/\/karstieltopia.com\/programacion\/java\/como-comprimir-en-java\/\"]}]},{\"@type\":\"Person\",\"@id\":\"http:\/\/karstieltopia.com\/#\/schema\/person\/3d09a55c38c7c00e78c41fa3f71a6e75\",\"name\":\"karstiel\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p6AuIG-BF","_links":{"self":[{"href":"http:\/\/karstieltopia.com\/wp-json\/wp\/v2\/posts\/2335"}],"collection":[{"href":"http:\/\/karstieltopia.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/karstieltopia.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/karstieltopia.com\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/karstieltopia.com\/wp-json\/wp\/v2\/comments?post=2335"}],"version-history":[{"count":1,"href":"http:\/\/karstieltopia.com\/wp-json\/wp\/v2\/posts\/2335\/revisions"}],"predecessor-version":[{"id":2336,"href":"http:\/\/karstieltopia.com\/wp-json\/wp\/v2\/posts\/2335\/revisions\/2336"}],"wp:attachment":[{"href":"http:\/\/karstieltopia.com\/wp-json\/wp\/v2\/media?parent=2335"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/karstieltopia.com\/wp-json\/wp\/v2\/categories?post=2335"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/karstieltopia.com\/wp-json\/wp\/v2\/tags?post=2335"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}