Java和PHP配合:deflate(压缩)和inflate(解压)

一、Java中deflate压缩发送给php解压缩

Android中deflate代码

OutputStream urlOutStream = urlConnection.getOutputStream();

// 要使用no_wrap的Deflater,php才能解压,9是最高的压缩级别,可以设置为1-9的级别,1速度最快

DeflaterOutputStream deflaterOut = new DeflaterOutputStream(urlOutStream, new Deflater(9, true));

deflaterOut.write((stringToPost[0]).getBytes());

deflaterOut.close();

urlOutStream.close();

PHP中inflate及deflate代码 (有时候终端方法压缩时会自动base64加密一次,php需要先解base64)https://tool.oschina.net/encrypt?type=3

// 首先获取post的字符串:

// 因为是直接写入的压缩字符串,

// 通过$_POST[]并不能获取post内容,

// 可以通过原始请求数据的只读输入流获得post内容

$postStr = file_get_contents(‘php://input‘);

// Java中默认的Deflater的数据格式有wrap,Java中应设置no_wrap的Deflater

// 如果Java中没有指定no_wrap的Deflater,则PHP中通过下面的算法将wrap去掉,也可以正常解压

// $deflateForPHP = substr($postStr, 2, -4);

// 解压缩获得请求的内容

$plainRequest = gzinflate($postStr);

// code here ...

// 将处理结果压缩后返回请求端

$result = "准备发给android的处理结果";

echo gzdeflate($result);

?>

Android中inflate代码

if (urlConnection.getResponseCode() == HttpURLConnection.HTTP_OK) {

InputStream urlInputStream = urlConnection.getInputStream();

// php中gzdeflate()压缩的结果,没有wrap,需要自行计算头尾验证字符,

// 或者指定new Inflater(true)的解压器才能正确解压(注意:没了传输错误校验)

InflaterInputStream inflaterIn = new InflaterInputStream(urlInputStream, new Inflater(true));

BufferedReader reader = new BufferedReader(new InputStreamReader(inflaterIn));

String res = "", line;

while ((line = reader.readLine()) != null) {

res += line;

}

Log.i(TAG, "Response length: " + res.length() + " response: " + res);

reader.close();

inflaterIn.close();

urlInputStream.close();

urlConnection.disconnect();

return res;

}

二、完整代码:

private class mHttp extends AsyncTask {

private URL mUrl;

private String mMethod = "GET";

private int mHttpTimeout = 3000; /* milliseconds */

private String TAG = "mHttp";

public mHttp(String url, String method) throws MalformedURLException {

mUrl = new URL(url);

if(method.toUpperCase().contains("POST")) mMethod = "POST";

}

public mHttp(String url) throws MalformedURLException {

mUrl = new URL(url);

}

@Override

protected String doInBackground(String... stringToPost) {

if (mUrl != null) {

try {

HttpURLConnection urlConnection = (HttpURLConnection) mUrl.openConnection();

urlConnection.setReadTimeout(mHttpTimeout);

urlConnection.setConnectTimeout(mHttpTimeout);

urlConnection.setRequestMethod(mMethod);

urlConnection.setDoInput(true);

// PHP已经应用pzdeflate()处理了结果,添加Accept-Encoding的header避免Apache再deflate处理

urlConnection.addRequestProperty("Accept-Encoding", "q=1.0 identity");

if (mMethod.equals("POST")) {

urlConnection.setDoOutput(true);

urlConnection.addRequestProperty("Content-Encoding", "deflate");

OutputStream urlOutStream = urlConnection.getOutputStream();

DeflaterOutputStream deflaterOut = new DeflaterOutputStream(urlOutStream, new Deflater(9, true));

deflaterOut.write((stringToPost[0]).getBytes());

deflaterOut.close();

urlOutStream.close();

}

urlConnection.connect();

if (urlConnection.getResponseCode() == HttpURLConnection.HTTP_OK) {

InputStream urlInputStream = urlConnection.getInputStream();

InflaterInputStream inflaterIn = new InflaterInputStream(urlInputStream, new Inflater(true));

BufferedReader reader = new BufferedReader(new InputStreamReader(inflaterIn));

String res = "", line;

while ((line = reader.readLine()) != null) {

res += line;

}

Log.i(TAG, "Response length: " + res.length() + " response: " + res);

reader.close();

inflaterIn.close();

urlInputStream.close();

urlConnection.disconnect();

return res;

} else {

// show response code.

Log.i(TAG, "doInBackground: responseCode: " + urlConnection.getResponseCode());

urlConnection.disconnect();

return null;

}

} catch (Exception e) {

e.printStackTrace();

}

}

return null;

}

@Override

protected void onPostExecute(String result) {

Log.i(TAG, "onPostExecute: " + result);

// 处理result字符串,例如显示在UI组件上

// code here...

}

}

mHttp http = new mHttp("http://examle.com/page.php", "post");

http.execute("String to be posted to the server");

用到的链接:

php://input 原始请求数据的只读输入流

DeflaterOutputStream

Deflater

InflaterInputStream

Inflater

gzinflate-in-java

原文:https://www.cnblogs.com/cxscode/p/12603199.html

deflate 压缩 java_Java和PHP配合:deflate(压缩)和inflate(解压)相关推荐

  1. Java后端压缩JSON字符串,前端使用pako.min.js解压

    我在日常开发中遇到,由于后端返回JSON数据较大,导致前端响应的较慢,于是考虑通过后端压缩,前端解压的方式来进行优化: 后端压缩工具类: package com.stt.common.util;imp ...

  2. 打包压缩RAC oracle软件目录后重装OS,解压后目录权限变化

    Linux AS 3.0 Oracle 10.2.0.4  RAC 安装Oracle 软件在 /u01/product 下面,3个节点,下线一个节点重新安装OS (硬件隐患), 重装之前备份了 pro ...

  3. Linux将文件压缩成tgz格式,以及将tgz格式解压

    解压        tar zxvf  filename.tgz 压缩:       tar zcvf  filename.tgz filename

  4. 使用golang 实现deflate、zlib压缩解压数据

    使用golang 实现deflate.zlib压缩解压数据 在golang的官方标准库的compress目录下,有bzip2.flate.gzip. lzw. zlib包实现对应算法的数据压缩和解压, ...

  5. pako java_java压缩字符串,前端接收pako解压

    使用springboot开发 1.后端java代码压缩: ``` /** * 测试GZIP压缩之后返回给前端,前端使用pako解压缩 * @return * @throws IOException * ...

  6. Java利用Gzip对字符串进行压缩与解压

    在某些业务场景下,可能需要对字符串进行压缩与解压,压缩字符串可以使用 GZIPOutputStream 输出流来实现,而解压可以使用 GZIPInputStream 输入流来实现,下面先给出具体的参考 ...

  7. Linux压缩与解压命令的使用

    压缩文件的格式种类很多,这里只介绍几种常见的压缩格式,比如 zip.tar.tar.gz.rar. 文章目录 ZIP zip unzip RAR rar a rar x GZIP gzip -r gz ...

  8. java inflater_180918-JDK之Deflater压缩与Inflater解压

    JDK 压缩与解压工具类 在实际的应用场景中,特别是对外传输数据时,将原始数据压缩之后丢出去,可以说是非常常见的一个case了,平常倒是没有直接使用JDK原生的压缩工具类,使用Protosutff和K ...

  9. linux xz 解压initrd.img,initrd.img的压缩(制作)及解压的过程

    一.启动镜像initrd.img 文件 类RedHat 系统从vmlinuz 核心引导后,会读取initrd.img 启动镜像.该文件中包含驱动模块等信息,是非常重要的文件.不同版本使用的格式不同. ...

  10. Linux常用文件压缩/解压命令格式大全(tar、gzip、bzip2、zip、compress、cpio、compress、dd)建议收藏

    Linux常用文件压缩/解压命令格式大全 1. tar 2. gzip 3. bzip2 4. zip 5. compress 6. cpio 7.dd 1. tar 打包备份后的文件包缀:.tar ...

最新文章

  1. SSE3和SSSE3 Intrinsics各函数介绍
  2. Mybatis入门程序增删改查操作
  3. 【热修复】Andfix源码分析
  4. SAP License:MM-采购订单migo,101收货,有三种方式冲销,可以使库存减少,有何不同?
  5. 调查作业时,注意 【 调查深度 】 ,以及总结 【 中间成果物 】
  6. 机器学习基础(五十六)—— tanh、sign 与 softsign
  7. linux删除文件未释放空间问题处理
  8. A*算法收敛最优点的简单证明
  9. 2021年MathorCup数学建模A题自动驾驶中的车辆调头问题全过程解题论文及程序
  10. 使用AD14制作PCB的全部流程以及PCB打样流程介绍
  11. Python的6种内置对象
  12. 公司股权等比稀释是什么意思
  13. 数据库工具sqlDBx连接mysql
  14. 华三离别华为一周年:销售80亿元纳税8亿
  15. 关于拿鸡蛋数学题的解法
  16. txt文本去重复 亲测50G文本高效去重复
  17. 疫情下的生鲜配送,数字供应链发挥了重大作用
  18. ubuntu ssh Host key verification failed,Host 10.xxx.xxx.xxx not found in /home/user/.ssh/known_hosts
  19. AStar寻路算法的Python实现
  20. 论文参考文献格式详细国家标准

热门文章

  1. Windows server 2008 R2安装详细教程
  2. 【基于Python的Selenium2自动化测试】04 - 模拟126邮箱的登录
  3. Cash-Secured Puts Vs. Covered Calls
  4. js加密php解密---jsencrypt
  5. 还原html默认打开方式,怎么还原打开方式,详细教您Win10系统下如何还原程序默认打开方式...
  6. 拥有70多个名字的南京,改城市名就像改微信名一样
  7. 保护眼睛,绿豆沙颜色的RGB值和HSL值
  8. 单线多拨,傻瓜式openwrt单线多拨叠加速率教程
  9. Python基本数据类型之数字
  10. QR扫码综合示例教程(六)Qt6.2.1(widget)取出视频帧 取景器帧