使用 GZIPOutputStream 压缩字符串

2023-12-08

我想压缩我的字符串值。这些字符串值应该与.net拉链的字符串。

I wrote 解压方法,当我发送.net将字符串压缩到其中,它可以正常工作。但是Compress方法无法正常工作。

public static String Decompress(String zipText) throws IOException {
    int size = 0;
    byte[] gzipBuff = Base64.decode(zipText);

    ByteArrayInputStream memstream = new ByteArrayInputStream(gzipBuff, 4,
            gzipBuff.length - 4);
    GZIPInputStream gzin = new GZIPInputStream(memstream);

    final int buffSize = 8192;
    byte[] tempBuffer = new byte[buffSize];
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    while ((size = gzin.read(tempBuffer, 0, buffSize)) != -1) {
        baos.write(tempBuffer, 0, size);
    }
    byte[] buffer = baos.toByteArray();
    baos.close();

    return new String(buffer, "UTF-8");
}
public static String Compress(String text) throws IOException {
    byte[] gzipBuff = EncodingUtils.getBytes(text, "UTF-8");

    ByteArrayOutputStream bs = new ByteArrayOutputStream();
    GZIPOutputStream gzin = new GZIPOutputStream(bs);

    gzin.write(gzipBuff);
    gzin.finish();
    bs.close();

    byte[] buffer = bs.toByteArray();
    gzin.close();

    return Base64.encode(buffer);
}

例如当我发送“BQAAAB+LCAAAAAAABADtvQdgHEmWJSYvbcp7f0r1StfgdKEIgGATJNiQQBDswYjN5pLsHWlHIymrKoHKZVZlXWYWQMztnbz33nvvvffee++997o7nU4n99//P1xmZAFs9s5K2smeIYCqyB8/fnwfPy LmeVlW/w+GphA2BQAAAA==" to 解压方法它返回字符串“Hello”,但是当我发送"Hello" to Compress方法返回“H4sIAAAAAAAAAAMtIzcnJBwCGphA2BQAAAA==”.

问题出在哪里Compress方法????


Check 使用 Zip Stream 和 Base64 编码器压缩大字符串数据

关于如何使用 GZIPOutputStream/GZIInputStream 和 Base64 编码器和解码器来压缩和解压缩大字符串数据,以便它可以在 http 响应中作为文本传递。

public static String compressString(String srcTxt) throws IOException {
  ByteArrayOutputStream rstBao = new ByteArrayOutputStream();
  GZIPOutputStream zos = new GZIPOutputStream(rstBao);
  zos.write(srcTxt.getBytes());
  IOUtils.closeQuietly(zos);

  byte[] bytes = rstBao.toByteArray();
  return Base64.encodeBase64String(bytes);
}

或者我们可以使用使用 Zip Stream 和 Base64 编码器压缩大字符串数据以避免将整个字符串加载到内存中。

public static String uncompressString(String zippedBase64Str) throws IOException {
  String result = null;
  byte[] bytes = Base64.decodeBase64(zippedBase64Str);
  GZIPInputStream zi = null;
  try {
    zi = new GZIPInputStream(new ByteArrayInputStream(bytes));
    result = IOUtils.toString(zi);
  } finally {
    IOUtils.closeQuietly(zi);
  }
    return result;
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 GZIPOutputStream 压缩字符串 的相关文章

  • 如何正确释放Android MediaPlayer

    我正在尝试向我的 Android 应用程序添加一个按钮 当点击该按钮时它会播放 MP3 我已经让它工作了 但没有办法释放 mediaPlayer 对象 因此即使在我离开活动后它仍然会继续播放 如果我在react 方法之外初始化MediaPl
  • Android Q:file.mkdirs() 返回 false

    我们有一个应用程序 使用外部存储来存储一些临时文件 图像 二进制数据 该代码已经运行了几年 直到最近才发生重大变化 在 Android Q 上它不起作用 File f new File Environment getExternalStor
  • fetchUuidsWithSdp 的奇怪 UUID 逆转

    我有一个在树莓派上运行的 python 蓝牙服务器 使用 PyBluez 我在服务器中使用的uuid是 8f86d132 4ab8 4c15 b8df 0b70cf10ea56 我正在打电话device fetchUuidsWithSdp
  • Java中有没有一种方法可以通过名称实例化一个类?

    我正在寻找问题 从字符串名称实例化一个类 https stackoverflow com questions 9854900 instantiate an class from its string name它描述了如何在有名称的情况下实例
  • Recyclerview 动态部分不使用任何第三个库

    我想将标头添加到 recyclerview 我正在尝试使用来实现它 Override public int getItemViewType int position depends on your problem if position 0
  • 如何使用 Google Maps for Android V2 处理地图移动结束?

    我想在地图中心更改后立即对地址进行地理编码 如何使用新的 Android 版 Google 地图 V2 处理地图移动 我说的是用户用手指拖动地图的情况 查看新的地图 API Override public void onMapReady G
  • 如何检查字符串是否为有效日期

    我有一个字符串 31 02 2010 并想检查它是否是有效日期 最好的方法是什么 我需要一个方法 如果字符串是有效日期 则返回 true 如果不是 则返回 false require date begin Date parse 31 02
  • 如何在我现有的 Android 应用程序中使用 Telegram API(包括聊天应用程序)?

    我想使用 telegram API 在我现有的 Android 应用程序中开发聊天功能 我不知道如何实施 我认为 看看Telegram 数据库库 测试版 从这里TDLib https core telegram org tdlib 俄语 但
  • 如何更改终端的默认目录?

    我想更改 Android Studio v2 2 2 终端的默认目录 当我打开终端时 它基于项目的目录 C 项目路径 我经常需要使用adb shell 所以我必须导航到 SDK 路径 平台工具 才能使用 adb 命令 是否可以更改终端的默认
  • 为什么是 javascript:history.go(-1);无法在移动设备上工作?

    首先 一些背景 我有一个向用户呈现搜索页面 html 表单 的应用程序 填写标准并单击 搜索 按钮后 结果将显示在标准部分下方 在结果列表中 您可以通过单击将您带到新页面的链接来查看单个结果的详细信息 在详细信息页面中 我添加了一个 返回结
  • Android Studio 与本地网络共享上的项目文件

    这是我的设置 Android Studio 项目文件位于 Ubuntu 14 10 盒子上的共享文件夹中 尝试在 Windows 8 机器上运行 Android Studio 1 0 2 并将 U 驱动器映射到包含项目文件的 Ubuntu
  • 使用片段时应用程序崩溃

    我正在处理碎片和 我的代码中有一个我找不到的问题 logcat 指向我的一个片段中的这段代码 Override public View onCreateView LayoutInflater inflater ViewGroup conta
  • 使用 AsyncTask 传递值

    我一直在努力解决这个问题 但我已经到了不知道该怎么办的地步 我想做的是使用一个类下载文件并将其解析为字符串 然后将该字符串发送到另一个类来解析 JSON 内容 所有部件都可以单独工作 并且我已经单独测试了所有部件 我只是不知道如何将值发送到
  • 我应该释放或重置 MediaPlayer 吗?

    我有自己的自定义适配器类 称为 WordAdapter 并且我正在使用媒体播放器 名为pronounce WordAdapter 类中的全局变量 我有不同的活动 其中每个列表项都有线性布局 名为linearLayout 我正在设置onCli
  • 如何将 ascii 值列表转换为 python 中的字符串?

    我在 Python 程序中有一个列表 其中包含一系列数字 这些数字本身就是 ASCII 值 如何将其转换为可以在屏幕上回显的 常规 字符串 您可能正在寻找 chr gt gt gt L 104 101 108 108 111 44 32 1
  • Android 如何将总天数准确更改为年、月、日?

    我正在做一个应用程序 该应用程序与根据给定的生日日期输入获取一个人的年龄有关 为此 我从下面的代码中获取从该日期到当前日期的总天数 String strThatDay 1991 05 10 SimpleDateFormat formatte
  • Android - 以编程方式选择菜单选项

    有没有办法以编程方式选择菜单选项 基本上 我希望视图中的按钮能够执行与按特定菜单选项相同的操作 我正在考虑尝试调用 onOptionsItemSelected MenuItem item 但我不知道要为菜单项添加什么 是的 有一种方法可以选
  • 问题:为什么React Native Video不能全屏播放视频?

    我正在react native 0 57 7 中为android和ios创建一个应用程序并使用反应本机视频 https github com react native community react native video播放上传到的视频
  • 错误:(23, 13) 无法解决:com.google.android.gms:play-services:11.2.0“安装存储库和同步项目”不起作用

    我正在尝试在我的 Android 应用程序中获取位置并更新到服务器 这是我的 Gradle 代码 我在这里包含了compile com google android gms play services 11 2 0 这条线是从文档中 htt
  • Android 屏幕方向错误

    我使用的是 Android HTC HERO 2 1 版本 我写的活动

随机推荐

  • 将 aleph 与 SWI-prolog 结合使用:source_sink `library(aleph)' 不存在

    我正在尝试使用 SWI Prolog 导入 Aleph 当我运行我的程序时 出现以下错误 我需要做什么才能导入library aleph 顺便说一下 我已经下载了aleph pl对于我的程序 这是我的测试程序 我知道aleph库一定有问题
  • 如何在 Laravel 中获取非键列字段的不同值?

    这可能很容易 但不知道如何做 我有一个表 它可以具有特定非键列字段的重复值 如何使用查询生成器或 Eloquent 编写 SQL 查询来获取该列具有不同值的行 请注意 我不仅仅获取该列 它与其他列值结合在一起 所以distinct 可能真的
  • Intellij 控制台输出

    这是一段简单代码的输出 Library Java JavaVirtualMachines jdk 9 jdk Contents Home bin java javaagent Applications IntelliJ IDEA CE ap
  • lightbox 2:如何通过 javascript 添加动态图像

    我在尝试时遇到困难动态添加图像 since 灯箱2 由 lokesh dakar 在文档加载后由现有的 html 编码图像进行初始化 并且在第一次之后不再解析文档 如果我尝试使用 javascript 添加新图像 例如将它们附加到正文中 它
  • 将 angular-ui-grid 字体复制到 .tmp/fonts

    我正在经历一个known issue with Angular UI 网格我的一些字体在生产中看起来像是韩文 我申请了某个修复通过添加以下 CSS font face font family ui grid src url fonts ui
  • Rails 未定义 Rails 模块的方法“组”

    在 Mac OS X 上工作 尝试学习 Rails 当我输入 rails generated Scaffold User name string email string 时 出现以下错误 Users dnf1991 rails proje
  • python/matplotlib - 寄生双轴缩放

    尝试绘制频谱 即速度与强度的关系 下部 x 轴 速度 上部双轴 频率 它们之间的关系 多普勒公式 为 f 1 v c f 0 其中 f 是结果频率 v 是速度 c 是光速 f 0 是 v 0 时的频率 即 v lsr 我试图通过查看来解决它
  • jquery 清理旧对话框

    我正在尝试使用 UI 对话框创建模式对话框 对话框工作正常 一切都很好 我使用角落里的 X 关闭对话框 我尝试使用dialog destroy remove 但我当然无法再次打开它 我想我只是不明白如何重新初始化对话框并且其中没有旧值 fu
  • 删除 URL 中的 .php 扩展名

    我之前改变了我的 htaccess文件 以便我的 子目录 13 可以成为我用于主域的 目录 方法是添加 RewriteCond HTTP HOST www mydomain com RewriteRule 13 index php L 现在
  • 渐进式网络应用程序信标搜索

    是否可以通过仅使用 Web 技术而不使用本机移动技术 Android ios 的渐进式 Web 应用程序来搜索信标数据 uuid url 等 提前致谢 不幸的是 截至 2020 年 7 月 这是不可能的 虽然 Google 一直致力于Web
  • 存储多种数据类型的列表类型

    所以我的问题是我在 Android Java 上编写了一个需要两个 Double 两个 Int 和一个 Calendar 对象的函数 我相信提供的类允许它在单独的线程 AsyncTask 中运行 只接受一种类型的对象 但允许多种 作为参数
  • Pygame改变粒子颜色

    所以我有这段代码 import pygame def colors import random clock pygame time Clock pygame init pygame font init pygame display set
  • UIScrollView 无法看到 ScrollBars/Indicators。

    我以编程方式创建了一个 UISCrollView 但我看不到滚动条 指示器 UIScrollView contentScrollView UIScrollView alloc initWithFrame CGRectMake 760 70
  • 使用 Maven 进行多部署环境(生产/开发)

    我在 Maven 中有一个 Web 应用程序 具有默认的目录结构 那里没问题 默认目录结构有一些指向我的本地主机数据库的属性文件 目前我创建一个 Ant 脚本来创建不同的 war 文件 一个用于生产 一个用于开发 使用以下命令 ant de
  • TYPO3 9.5.2 Slug:多语言:如果不存在页面翻译,则找不到页面 404 异常

    我有一个有两种语言的网站 例如德文和英文 De 是我的默认语言 没有路径前缀 En 第二种语言 在 url 中以 en 作为前缀 现在 当我切换到 en 语言时 菜单项链接的 url 中包含 en 这很好 但是 当我单击后端未显式翻译的菜单
  • 日期值格式错误

    我正在尝试转换字符串DateTime存在于平面文件中的值Date解析我的代码中的平面文件后的对象 我已经编写了代码来执行此操作 但是当我格式化日期时 它总是为我提供比指定值多于 1 天的日期 有时它会添加 5 30 下面是代码 DateFo
  • Java中float和double的包含范围是多少?

    Java中float和double的包含范围是多少 为什么不建议在精度至关重要的情况下使用 float 或 double Java 的原始数据类型 布尔值 1 位 只能采用 true 和 false 值 字节 1 个有符号字节 二进制补码
  • mysqli_result 类的对象无法转换为字符串错误[重复]

    这个问题在这里已经有答案了 我请求谷歌帮助我 但没有成功 这是生成错误的特定代码 this gt conn gt query UPDATE tz members SET confirm yes WHERE usr uname 整个函数如下
  • Android - 网络日期/时间

    我正在为 Android 编写一个应用程序 我需要允许我的用户捕获他们当前的位置并记录发生这种情况的日期 时间 问题是用户不能通过调整设备上的日期 时间来更改日期 时间 您能否为我指明在使用信号塔定位服务时获取蜂窝网络日期 时间的正确方向
  • 使用 GZIPOutputStream 压缩字符串

    我想压缩我的字符串值 这些字符串值应该与 net拉链的字符串 I wrote 解压方法 当我发送 net将字符串压缩到其中 它可以正常工作 但是Compress方法无法正常工作 public static String Decompress