使用DEFLATE壓縮演算法壓縮後,Base64編碼的方式傳輸經壓縮編碼的檔案內容
阿新 • • 發佈:2018-12-04
1、先把檔案以流的方式InputStream讀入in.read(s, 0, in.available());
/** * 功能:將批量檔案內容使用DEFLATE壓縮演算法壓縮,Base64編碼生成字串並返回<br> * 適用到的交易:批量代付,批量代收,批量退貨<br> * @param filePath 批量檔案-全路徑檔名<br> * @return */ public static String enCodeFileContent(String filePath,String encoding){ String baseFileContent = ""; File file = new File(filePath); if (!file.exists()) { try { file.createNewFile(); } catch (IOException e) { logger.error(e.getMessage(), e); } } InputStream in = null; try { in = new FileInputStream(file); int fl = in.available(); if (null != in) { byte[] s = new byte[fl]; in.read(s, 0, fl); // 壓縮編碼 //TODO baseFileContent = } } catch (Exception e) { logger.error(e.getMessage(), e); } finally { if (null != in) { try { in.close(); } catch (IOException e) { logger.error(e.getMessage(), e); } } } return baseFileContent; }
2、進行BASE64編碼
Base64.encodeBase64(inputByte);
3、對byte[]進行壓縮 deflater方法
/** * 壓縮. * * @param inputByte 需要解壓縮的byte[]陣列 * @return 壓縮後的資料 * @throws IOException */ public static byte[] deflater(final byte[] inputByte) throws IOException { int compressedDataLength = 0; Deflater compresser = new Deflater(); compresser.setInput(inputByte); compresser.finish(); ByteArrayOutputStream o = new ByteArrayOutputStream(inputByte.length); byte[] result = new byte[1024]; try { while (!compresser.finished()) { compressedDataLength = compresser.deflate(result); o.write(result, 0, compressedDataLength); } } finally { o.close(); } compresser.end(); return o.toByteArray(); }
綜上:
baseFileContent = new String(Base64.encodeBase64(Util.deflater(s)),encoding);