压缩和解压缩流

2023-11-23

我发现这篇关于用JAVA实现简单代理服务器的文章:

http://www.java2s.com/Code/Java/Network-Protocol/Asimpleproxyserver.htm

该代码只是从客户端获取一些流,然后将其发送到服务器,然后从服务器获取流并将响应发送到客户端。我想做的是在发送该流之前对其进行压缩,并在接收后对其进行解压缩。

我找到了班级GZIPInputStream但我不知道如何使用它,而且我在互联网上找到的内容对我没有帮助。我要么不太明白,要么这对我来说不是一个好的解决方案。

我的想法也是这样,但我不确定是否可以:

final InputStream streamFromClient = client.getInputStream();
final OutputStream streamToClient = client.getOutputStream();
final InputStream streamFromServer = server.getInputStream();
final OutputStream streamToServer = server.getOutputStream();

InputStream gzipStream = new GZIPInputStream(streamFromClient );
try
{
        while ((bytesRead = gzipStream.read(request)) != -1)
       {
                    streamToServer.write(request, 0, bytesRead);
                    streamToServer.flush();
        }
}
catch (Exception e) {
System.out.println(e);
}

现在发送到服务器的数据应该在发送之前进行压缩(但我不确定这是否是正确的解决方案)。是吗?

现在想象服务器向我发送压缩数据。 所以这个流:

final InputStream streamFromServer = server.getInputStream();

被压缩。

我怎样才能解压它并写入

final OutputStream streamToClient = client.getOutputStream();

谢谢你们的帮助,伙计们!


阅读这些流的 javadoc:http://download.oracle.com/javase/6/docs/api/java/util/zip/GZIPInputStream.html and http://download.oracle.com/javase/6/docs/api/java/util/zip/GZIPOutputStream.html.

GZIPOutputStream 在将写入的字节发送到包装的输出流之前对其进行压缩。 GZIPInputStream 从包装流中读取压缩字节并返回未压缩字节。

因此,如果您想向任何人发送压缩字节,则必须写入 GZIPOutputStream。但当然,只有当接收端知道并解压缩它接收到的字节时,这才有效。

同样,如果要读取压缩字节,则需要从 GZIPInputSTream 读取它们。但当然,只有发送端确实使用相同的算法压缩字节时,它才会起作用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

压缩和解压缩流 的相关文章

  • Junit:如何测试从属性文件读取属性的方法

    嗨 我有课ReadProperty其中有一个方法ReadPropertyFile返回类型的Myclass从属性文件读取参数值并返回Myclass目的 我需要帮助来测试ReadPropertyFile方法与JUnit 如果可能的话使用模拟文件
  • 如何通过 javaconfig 使用 SchedulerFactoryBean.schedulerContextAsMap

    我使用 Spring 4 0 并将项目从 xml 移至 java config 除了访问 Service scheduleService 带注释的类来自QuartzJobBean executeInternal 我必须让它工作的 xml 位
  • Pig Udf 显示结果

    我是 Pig 的新手 我用 Java 编写了一个 udf 并且包含了一个 System out println 其中的声明 我必须知道在 Pig 中运行时该语句在哪里打印 假设你的UDF 扩展了 EvalFunc 您可以使用从返回的 Log
  • 如何更改javaFX中按钮的图像?

    我正在使用javaFX 我制作了一个按钮并为此设置了图像 代码是 Image playI new Image file c Users Farhad Desktop icons play2 jpg ImageView iv1 new Ima
  • 谷歌应用程序引擎会话

    什么是java应用程序引擎 默认会话超时 如果我们将会话超时设置为非常非常长的时间 会不会产生不良影响 因为谷歌应用程序引擎会话默认情况下仅存储在数据存储中 就像facebook一样 每次访问该页面时 会话仍然永远存在 默认会话超时设置为
  • 在接口中使用默认方法是否违反接口隔离原则?

    我正在学习 SOLID 原则 ISP 指出 客户端不应被迫依赖于他们所使用的接口 不使用 在接口中使用默认方法是否违反了这个原则 我见过类似的问题 但我在这里发布了一个示例 以便更清楚地了解我的示例是否违反了 ISP 假设我有这个例子 pu
  • 来自 dll 的 Java 调用函数

    我有这个 python 脚本导入zkemkeeperdll 并连接到考勤设备 ZKTeco 这是我正在使用的脚本 from win32com client import Dispatch zk Dispatch zkemkeeper ZKE
  • 从最终实体获取根证书和中间证书

    作为密码学的菜鸟 我每天都会偶然发现一些简单的事情 今天只是那些日子之一 我想用 bouncy castle 库验证 java 中的 smime 消息 我想我几乎已经弄清楚了 但此时的问题是 PKIXparameters 对象的构建 假设我
  • 将流转换为 IntStream

    我有一种感觉 我在这里错过了一些东西 我发现自己做了以下事情 private static int getHighestValue Map
  • jdbc mysql loginTimeout 不起作用

    有人可以解释一下为什么下面的程序在 3 秒后超时 因为我将其设置为在 3 秒后超时 12秒 我特意关闭了mysql服务器来测试mysql服务器无法访问的这种场景 import java sql Connection import java
  • 如何在用户输入数据后重新运行java代码

    嘿 我有一个基本的java 应用程序 显示人们是成年人还是青少年等 我从java开始 在用户输入年龄和字符串后我找不到如何制作它它们被归类为 我希望它重新运行整个过程 以便其他人可以尝试 的节目 我一直在考虑做一个循环 但这对我来说没有用
  • Spring Boot Data JPA 从存储过程接收多个输出参数

    我尝试通过 Spring Boot Data JPA v2 2 6 调用具有多个输出参数的存储过程 但收到错误 DEBUG http nio 8080 exec 1 org hibernate engine jdbc spi SqlStat
  • Java ResultSet 如何检查是否有结果

    结果集 http java sun com j2se 1 4 2 docs api java sql ResultSet html没有 hasNext 方法 我想检查 resultSet 是否有任何值 这是正确的方法吗 if resultS
  • Java 和 Python 可以在同一个应用程序中共存吗?

    我需要一个 Java 实例直接从 Python 实例数据存储中获取数据 我不知道这是否可能 数据存储是否透明 唯一 或者每个实例 如果它们确实可以共存 都有其单独的数据存储 总结一下 Java 应用程序如何从 Python 应用程序的数据存
  • 为什么 Java 8 不允许非公共默认方法?

    让我们举个例子 public interface Testerface default public String example return Hello public class Tester implements Testerface
  • Eclipse 选项卡宽度不变

    我浏览了一些与此相关的帖子 但它们似乎并不能帮助我解决我的问题 我有一个项目 其中 java 文件以 2 个空格的宽度缩进 我想将所有内容更改为 4 空格宽度 我尝试了 正确的缩进 选项 但当我将几行修改为 4 空格缩进时 它只是将所有内容
  • java.io.Serialized 在 C/C++ 中的等价物是什么?

    C C 的等价物是什么java io Serialized https docs oracle com javase 7 docs api java io Serializable html 有对序列化库的引用 用 C 序列化数据结构 ht
  • 干净构建 Java 命令行

    我正在使用命令行编译使用 eclipse 编写的项目 如下所示 javac file java 然后运行 java file args here 我将如何运行干净的构建或编译 每当我重新编译时 除非删除所有内容 否则更改不会受到影响 cla
  • 使用 svn 1.8.x、subclise 1.10 的 m2e-subclipse 连接器在哪里?

    我读到 m2e 的生产商已经停止生产 svn 1 7 以外的任何版本的 m2e 连接器 Tigris 显然已经填补了维护 m2e subclipse 连接器的空缺 Q1 我的问题是 使用 svn 1 8 x 的 eclipse 更新 url
  • Java中super关键字的范围和使用

    为什么无法使用 super 关键字访问父类变量 使用以下代码 输出为 feline cougar c c class Feline public String type f public Feline System out print fe

随机推荐

  • 如何在.net中查找当前线程的最大堆栈大小?

    如何找到当前线程的最大堆栈大小 我在从 MMC UI 而不是从 Powershell 命令行 控制台 执行函数时遇到堆栈溢出异常 所以我猜测它与 UI 线程中分配的默认堆栈大小与 Powershell 命令行 控制台 中分配的默认堆栈大小有
  • gridview rowCommand 中的行索引

    只是想将值从变量转移到另一个变量 protected void gvVariableDetail RowCommand object sender GridViewCommandEventArgs e if e CommandName Ed
  • XNA 和 GUI 控件(例如 xaml 和 xna)

    有没有办法在 xna 中获取支持边距等的文本框 标签和其他 wpf 控件 并根据窗口大小进行伸缩 你可能会给CeGui a shot 如果您的游戏需要高级 GUI 功能 CeGui 可能正好适合您 撇开市场因素不谈 这是一个非常好的 GUI
  • AlarmManager 在 Android 4.4.2 中停止工作(使用 SetExact())

    我在代码中设置了一个在特定时间响起的闹钟 警报机制在 SDK 这是我设置闹钟的代码 public void SetAlarm Context context Long executionTime AlarmManager am AlarmM
  • 让 Git 使用代理服务器 - 失败并显示“请求超时”

    如何让 Git 使用代理服务器 我需要从 Git 服务器检查代码 但每次都显示 请求超时 我该如何解决这个问题 或者 如何设置代理服务器 使用的命令 git config global http proxy http proxyuser e
  • 有多少用户连接到我的 Shiny 应用程序?

    我正在开发一个闪亮的应用程序shinydashboard在应用程序的某个地方 我想显示一条通知 告诉用户有多少其他用户同时连接到该应用程序 我想出了第一段似乎有效的代码 library shiny ui fluidPage uiOutput
  • 单元测试插入/更新/删除

    我用谷歌搜索了一下 并没有真正找到我需要的答案 我正在为客户使用 C SQL Server 和 LINQ 开发一个网页 我希望用户能够互相发送消息 所以我所做的是使用实际进入数据库的数据对其进行单元测试 问题是我现在依赖于至少有 2 个我知
  • PowerShell v5 - 如何将模块安装到没有互联网连接的计算机上?

    我有一台机器 v3 互联网 无管理员访问权限 我用它下载 WMF 5 0 并设置另一台机器 v5 无互联网 管理员访问权限 现在 我想在运行 v5 但没有互联网连接的计算机上使用 PowerShellGet 中的一些模块 我需要一个选项来下
  • 如何修复 iOS Firestore Increment() 上的错误“‘增量’的使用不明确”

    我在尝试使用 firebase 时收到编译器错误FieldValue increment 1 在 iOS 中使用 swift 该错误仅表示 增量 的使用不明确 我已将所有 pod 更新为所使用的所有 firebase pod 的当前版本 更
  • FFMPEG:使用绘图文本以及自动换行和填充创建视频

    我正在努力使用绘图文本过滤器从文本创建视频 输出视频我可以看到文本溢出而不是换行 有什么方法可以存档自动换行并将内部填充设置为视频 下面是我用来从文本生成视频的片段 ffmpeg exe f lavfi i color c white s
  • 在 numpy 数组中相乘

    我试图将二维数组中的每个项乘以一维数组中的相应项 如果我想将每一列乘以一维数组 这非常容易 如下所示numpy 乘法功能 但我想做相反的事情 将行中的每一项相乘 换句话说 我想乘以 1 2 3 0 4 5 6 1 7 8 9 2 and g
  • 如何在 Rails 6 中执行自定义 JavaScript 函数

    随着 Webpacker 引入 Ruby On Rails 我找不到使用 JavaScript 函数的方法 我有一个名为app globals js具有要测试的功能 function alerts alert TEST 然后我想在我的观点之
  • Codeigniter:ORDER BY CASE 查询出错

    这是我的查询代码点火器 this gt db gt select p u firstname u lastname s title AS industry pt type name al length value FALSE this gt
  • Firemonkey 中的 Cleartype 字体/文本渲染

    下面是一个仅包含 TEdit 控件的示例 VCL 应用程序 如果您编译类似的 Firemonkey FMX 应用程序 您会注意到这一点 小L字母疯狂地跳来跳去 根据我的研究我发现thisG 帖子的结果是 如您所见 结果更好 跳跃消失了 然而
  • 如何在一定时间后删除MySQL记录

    我想在 7 天后从 MySQL 数据库中删除一些消息 我的消息表行具有以下格式 编号 留言 日期 日期是正常格式的时间戳 2012 12 29 17 14 53 我认为 MySQL 事件将是替代 cron 作业的方法 对于经验丰富的 SQL
  • 在 C++ 中将宽字符字符串转换为小写

    如何在 C 中将 wchar t 字符串从大写转换为小写 该字符串包含日语 中文 德语和希腊字符的混合体 我想过用塔罗 http msdn microsoft com en us library 8h19t214 28VS 80 29 as
  • Android 棒棒糖工具栏在打开/关闭抽屉和后退按钮之间切换

    我有标准导航抽屉 但现在我正在尝试使用工具栏修改它 早些时候我的代码看起来像 MainActivity java Override protected void onCreate Bundle savedInstanceState supe
  • 从 TensorFlow 图中删除 dropout 操作

    我有一个经过训练的冻结图 我正在尝试在 ARM 设备上运行它 基本上 我使用 contrib pi examples label image 但使用我的网络而不是 Inception 我的网络接受了 dropout 训练 这现在给我带来了麻
  • 无法在 Windows 8 上使用 SetSystemTime 设置时钟

    我的应用程序使用SetSystemTime 从 GPS 源设置 PC 时钟 这在禁用用户帐户控制的 Windows 7 中工作正常 但在 Windows 8 中 即使禁用 UAC 它也会失败 我得到的错误是ERROR PRIVILEGE N
  • 压缩和解压缩流

    我发现这篇关于用JAVA实现简单代理服务器的文章 http www java2s com Code Java Network Protocol Asimpleproxyserver htm 该代码只是从客户端获取一些流 然后将其发送到服务器