{"id":945,"date":"2023-10-24T20:08:56","date_gmt":"2023-10-25T00:38:56","guid":{"rendered":"http:\/\/gregorgonzalez.com.ve\/blog\/?p=945"},"modified":"2023-10-24T20:11:51","modified_gmt":"2023-10-25T00:41:51","slug":"comprimir-archivos-byte-array-a-zip-y-descomprimir-zip-a-byte-array","status":"publish","type":"post","link":"https:\/\/gregorgonzalez.com.ve\/blog\/comprimir-archivos-byte-array-a-zip-y-descomprimir-zip-a-byte-array\/","title":{"rendered":"Comprimir archivos byte array a zip y descomprimir zip a byte array &#8211; Java"},"content":{"rendered":"<p>Trabajando con una API para subir y bajar archivos de un servidor, me doy cuenta que todos los archivos los manejan como byte[] array, lo com\u00fan es pasar esos archivos a base64 e incluso hay APIs que los convierte a esa base autom\u00e1ticamente si los devuelves en un json.<\/p>\n<p>Para este caso necesitaba generar archivos zip y abrir archivos zip, todo en memoria sin escribir en el disco.<\/p>\n<p>Estos m\u00e9todos usa las clases propia que provee java: java.io y java.util.zip<\/p>\n<h4>Ejemplo para comprimir m\u00faltiples archivos byte[] array<\/h4>\n<pre class=\"lang:java decode:true \">  public byte[] filesToZip(Map&lt;String, byte[]&gt; mapFiles) {\r\n    ByteArrayOutputStream baos = new ByteArrayOutputStream();\r\n    ZipOutputStream zos = new ZipOutputStream(baos);\r\n    try {\r\n      for (Map.Entry&lt;String, byte[]&gt; file : mapFiles.entrySet()) {\r\n        ZipEntry entry = new ZipEntry(file.getKey());\r\n        entry.setSize(file.getValue().length);\r\n        zos.putNextEntry(entry);\r\n        zos.write(file.getValue());\r\n      }\r\n      zos.closeEntry();\r\n      zos.close();\r\n    } catch (java.io.IOException e) {\r\n      \/\/ Manejo de excepciones\r\n    }\r\n    return baos.toByteArray();\r\n  }<\/pre>\n<p>&nbsp;<\/p>\n<h4>Ejemplo para descomprimir un zip tipo byte[] array<\/h4>\n<pre class=\"lang:java decode:true\">  public Map&lt;String, byte[]&gt; zipToFiles(final byte[] zipFile) {\r\n    Map&lt;String, byte[]&gt; mapFiles = new HashMap&lt;&gt;();\r\n    ZipInputStream zi;\r\n    try {\r\n      \/\/Test local\r\n      \/\/FileOutputStream fos = new FileOutputStream(\"C:\/test\/archivo_descargado.zip\");\r\n      \/\/fos.write(zipFile);\r\n      \/\/fos.close();\r\n\r\n      zi = new ZipInputStream(new ByteArrayInputStream(zipFile));\r\n      ZipEntry zipEntry;\r\n      while ((zipEntry = zi.getNextEntry()) != null) {\r\n        mapFiles.put(zipEntry.getName(), zi.readAllBytes());\r\n      }\r\n      zi.closeEntry();\r\n      zi.close();\r\n    } catch (java.io.IOException e) {\r\n      \/\/ Manejo de excepciones\r\n    }\r\n    return mapFiles;\r\n  }<\/pre>\n<p>&nbsp;<\/p>\n<p>No entro en detalles ya que es bastante simple y b\u00e1sico, aunque hay librer\u00edas dedicadas para ello, el Zip es un est\u00e1ndar universal y es el m\u00e1s recomendado para cualquier proceso.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Trabajando con una API para subir y bajar archivos de un servidor, me doy cuenta que todos los archivos los manejan como byte[] array, lo com\u00fan es pasar esos archivos a base64 e incluso hay APIs que los convierte a esa base autom\u00e1ticamente si los devuelves en un json. Para este caso necesitaba generar archivos [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":946,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_exactmetrics_skip_tracking":false,"_exactmetrics_sitenote_active":false,"_exactmetrics_sitenote_note":"","_exactmetrics_sitenote_category":0,"footnotes":""},"categories":[227],"tags":[361,362,364,363],"_links":{"self":[{"href":"https:\/\/gregorgonzalez.com.ve\/blog\/wp-json\/wp\/v2\/posts\/945"}],"collection":[{"href":"https:\/\/gregorgonzalez.com.ve\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/gregorgonzalez.com.ve\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/gregorgonzalez.com.ve\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/gregorgonzalez.com.ve\/blog\/wp-json\/wp\/v2\/comments?post=945"}],"version-history":[{"count":3,"href":"https:\/\/gregorgonzalez.com.ve\/blog\/wp-json\/wp\/v2\/posts\/945\/revisions"}],"predecessor-version":[{"id":950,"href":"https:\/\/gregorgonzalez.com.ve\/blog\/wp-json\/wp\/v2\/posts\/945\/revisions\/950"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/gregorgonzalez.com.ve\/blog\/wp-json\/wp\/v2\/media\/946"}],"wp:attachment":[{"href":"https:\/\/gregorgonzalez.com.ve\/blog\/wp-json\/wp\/v2\/media?parent=945"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/gregorgonzalez.com.ve\/blog\/wp-json\/wp\/v2\/categories?post=945"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/gregorgonzalez.com.ve\/blog\/wp-json\/wp\/v2\/tags?post=945"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}