1. 程式人生 > >使用DEFLATE壓縮演算法壓縮後,Base64編碼的方式傳輸經壓縮編碼的檔案內容

使用DEFLATE壓縮演算法壓縮後,Base64編碼的方式傳輸經壓縮編碼的檔案內容

 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);