deflate 压缩 java_Java和PHP配合:deflate(压缩)和inflate(解压)
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(解压)相关推荐
- Java后端压缩JSON字符串,前端使用pako.min.js解压
我在日常开发中遇到,由于后端返回JSON数据较大,导致前端响应的较慢,于是考虑通过后端压缩,前端解压的方式来进行优化: 后端压缩工具类: package com.stt.common.util;imp ...
- 打包压缩RAC oracle软件目录后重装OS,解压后目录权限变化
Linux AS 3.0 Oracle 10.2.0.4 RAC 安装Oracle 软件在 /u01/product 下面,3个节点,下线一个节点重新安装OS (硬件隐患), 重装之前备份了 pro ...
- Linux将文件压缩成tgz格式,以及将tgz格式解压
解压 tar zxvf filename.tgz 压缩: tar zcvf filename.tgz filename
- 使用golang 实现deflate、zlib压缩解压数据
使用golang 实现deflate.zlib压缩解压数据 在golang的官方标准库的compress目录下,有bzip2.flate.gzip. lzw. zlib包实现对应算法的数据压缩和解压, ...
- pako java_java压缩字符串,前端接收pako解压
使用springboot开发 1.后端java代码压缩: ``` /** * 测试GZIP压缩之后返回给前端,前端使用pako解压缩 * @return * @throws IOException * ...
- Java利用Gzip对字符串进行压缩与解压
在某些业务场景下,可能需要对字符串进行压缩与解压,压缩字符串可以使用 GZIPOutputStream 输出流来实现,而解压可以使用 GZIPInputStream 输入流来实现,下面先给出具体的参考 ...
- Linux压缩与解压命令的使用
压缩文件的格式种类很多,这里只介绍几种常见的压缩格式,比如 zip.tar.tar.gz.rar. 文章目录 ZIP zip unzip RAR rar a rar x GZIP gzip -r gz ...
- java inflater_180918-JDK之Deflater压缩与Inflater解压
JDK 压缩与解压工具类 在实际的应用场景中,特别是对外传输数据时,将原始数据压缩之后丢出去,可以说是非常常见的一个case了,平常倒是没有直接使用JDK原生的压缩工具类,使用Protosutff和K ...
- linux xz 解压initrd.img,initrd.img的压缩(制作)及解压的过程
一.启动镜像initrd.img 文件 类RedHat 系统从vmlinuz 核心引导后,会读取initrd.img 启动镜像.该文件中包含驱动模块等信息,是非常重要的文件.不同版本使用的格式不同. ...
- 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 ...
最新文章
- SSE3和SSSE3 Intrinsics各函数介绍
- Mybatis入门程序增删改查操作
- 【热修复】Andfix源码分析
- SAP License:MM-采购订单migo,101收货,有三种方式冲销,可以使库存减少,有何不同?
- 调查作业时,注意 【 调查深度 】 ,以及总结 【 中间成果物 】
- 机器学习基础(五十六)—— tanh、sign 与 softsign
- linux删除文件未释放空间问题处理
- A*算法收敛最优点的简单证明
- 2021年MathorCup数学建模A题自动驾驶中的车辆调头问题全过程解题论文及程序
- 使用AD14制作PCB的全部流程以及PCB打样流程介绍
- Python的6种内置对象
- 公司股权等比稀释是什么意思
- 数据库工具sqlDBx连接mysql
- 华三离别华为一周年:销售80亿元纳税8亿
- 关于拿鸡蛋数学题的解法
- txt文本去重复 亲测50G文本高效去重复
- 疫情下的生鲜配送,数字供应链发挥了重大作用
- ubuntu ssh Host key verification failed,Host 10.xxx.xxx.xxx not found in /home/user/.ssh/known_hosts
- AStar寻路算法的Python实现
- 论文参考文献格式详细国家标准
热门文章
- Windows server 2008 R2安装详细教程
- 【基于Python的Selenium2自动化测试】04 - 模拟126邮箱的登录
- Cash-Secured Puts Vs. Covered Calls
- js加密php解密---jsencrypt
- 还原html默认打开方式,怎么还原打开方式,详细教您Win10系统下如何还原程序默认打开方式...
- 拥有70多个名字的南京,改城市名就像改微信名一样
- 保护眼睛,绿豆沙颜色的RGB值和HSL值
- 单线多拨,傻瓜式openwrt单线多拨叠加速率教程
- Python基本数据类型之数字
- QR扫码综合示例教程(六)Qt6.2.1(widget)取出视频帧 取景器帧