当前位置: 首页 > 知识库问答 >
问题:

Netty(4.0.4)版本压缩/解压缩字符串消息错误

闻人德庸
2023-03-14

我想在Netty客户端/服务器上应用压缩/解压缩。我在客户端和服务器中使用以下代码作为管道:

@Override
protected void initChannel(SocketChannel ch) throws Exception {
ChannelPipeline pipeline = ch.pipeline();
pipeline.addLast("framer", new DelimiterBasedFrameDecoder(
    8192, Delimiters.lineDelimiter()));

pipeline.addLast("decoder", new StringDecoder());
pipeline.addLast("encoder", new StringEncoder());
pipeline.addLast("gzipdeflater", ZlibCodecFactory.newZlibEncoder(ZlibWrapper.GZIP));
pipeline.addLast("gzipinflater", ZlibCodecFactory.newZlibDecoder(ZlibWrapper.GZIP));

// and then business logic.
pipeline.addLast("handler", new NettyClientHandler());        
}

并将服务器设置为:

@Override
protected void initChannel(SocketChannel ch) throws Excepthtml" target="_blank">ion {
ChannelPipeline pipeline = ch.pipeline();
pipeline.addLast("framer", new DelimiterBasedFrameDecoder(
    8192, Delimiters.lineDelimiter()));
pipeline.addLast("decoder", new StringDecoder());
pipeline.addLast("encoder", new StringEncoder());
pipeline.addLast("gzipdeflater", ZlibCodecFactory.newZlibEncoder(ZlibWrapper.GZIP));
pipeline.addLast("gzipinflater", ZlibCodecFactory.newZlibDecoder(ZlibWrapper.GZIP));
//GlibDecoder
//pipeline.addLast("decoder", new ZlibDecoder());
//pipeline.addLast("encoder", new StringEncoder());
// and then business logic.
pipeline.addLast("handler", new NettyServerHandler());        
}

我得到了以下错误在客户端启动连接

警告:初始化通道失败。关闭:[id: 0x3553bb5c]java.lang.NoClassDefFoundError: com/jcraft/jzlib/Inflater在io.netty.handler.codec.compression.JZlibDecoder.(JZlibDecoder.java:28)在io.netty.handler.codec.compression.ZlibCodecFactory.newZlibDecoder(ZlibCodecFactory.java:86)在testchat。NettyClientInitializer.init频道(NettyClientInitializer.java:36)。NettyClientInitializer.init频道(NettyClientInitializer.java:21)在io.netty.channel.频道nitializer.channel注册(频道nitializer.java:70)在io.netty.channel.DefaultChannelHandlerContext.invoke频道注册(DefaultChannelHandlerContext.java:188)在io.netty.channel.DefaultChannelHandlerContext.fire渠道注册(DefaultChannelHandlerContext.java:174)在io.netty.channel.DefaultChannelPipeline. fire渠道注册(DefaultChannelPipeline. java: 730)在io. netty. channel。AbstractChannel在io. netty. Channel注册0(AbstractChannel. java: 426)。AbstractChannel$AbstractUn安全访问100美元(AbstractChannel. java: 367)在io. netty. Channel。AbstractChannel$AbstractUn安全1美元. run(AbstractChannel. java: 403)at io. netty. util. con电流。SingleThreadEventExecutor. runAll任务(SingleThreadEventExecutor. java: 353)位于io. netty. Channel. nio。NioEventLoop. run(NioEventLoop. java: 366)at io. netty. util. con当前。在java. lang上运行(SingleThreadEventExecutor. java: 101)。线程. run(Thread. java: 722)引起:java. lang.ClassNotFoundExcema: com. jcraft. jzlib.在java. net充气。在java. net上运行(URLClassLoader. java: 366)。运行(URLClassLoader. java: 355)在java. security。在java. net的AccessController. doPrivileged(本机方法)。在java. lang的URLClassLoader. findClass(URLClassLoader. java: 354)。ClassLoader. loadClass(ClassLoader. java: 423)at sun. misc.在java. lang启动$AppClassLoader. loadClass(Launcher. java: 308)。ClassLoader. loadClass(ClassLoader. java: 356)...15 more

线程“main”java中出现异常。尼奥。频道。ClosedChannel异常

客户端/服务器在没有压缩的情况下工作得很好。我尝试在字符串编码之前进行压缩/解压缩,但我得到了相同的错误?需要帮忙吗?

共有2个答案

宋华美
2023-03-14

感谢您在多次试验后的评论,我找到了正确的问题解决方案,如:-在netbeans中,我添加了jzlib-1.1.2。jar到我的项目管道的正确顺序如下代码所示:

pipeline.addLast("deflater", ZlibCodecFactory.newZlibEncoder(ZlibWrapper.GZIP));
pipeline.addLast("inflater", ZlibCodecFactory.newZlibDecoder(ZlibWrapper.GZIP));

pipeline.addLast("framer", new DelimiterBasedFrameDecoder(
        8192, Delimiters.lineDelimiter()));


pipeline.addLast("decoder", new MyStringDecoder());
pipeline.addLast("encoder", new MyStringEncoder()); 

在客户端和服务器中

钮承恩
2023-03-14

您需要在pom中添加以下依赖项。xml:

  <dependency>
    <groupId>com.jcraft</groupId>
    <artifactId>jzlib</artifactId>
      <version>1.1.2</version>
  </dependency>

这是因为netty将所有依赖项声明为可选的。

 类似资料:
  • 本文向大家介绍php压缩和解压缩字符串的方法,包括了php压缩和解压缩字符串的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了php压缩和解压缩字符串的方法。分享给大家供大家参考。具体如下: 下面php代码通过gzcompress和gzuncompress压缩和解压缩字符串,可以设定压缩级别 希望本文所述对大家的php程序设计有所帮助。

  • 问题内容: 我在想办法也无法在Java中解压缩String时遇到麻烦。这是我要学习的基本Java类,因此只需要基本命令,没有什么花哨的地方。它能够输入的目标 在命令提示符下,它将打印(就像它压缩参数字符串一样)。 另一个目标是输入 它将打印(就像它将解压缩参数String一样)。减压是我遇到的问题。这是我的代码,非常感谢我得到的任何帮助。 问题答案: Quick Code for you..

  • 问题内容: 我正在使用以下代码来压缩和解压缩字符串数据,但是我面临的问题是,它很容易被压缩而不会出错,但是decompress方法会引发以下错误。 线程“主”中的异常java.io.IOException:不是GZIP格式 仍然不知道如何解决此问题!!! 问题答案: 这是因为 发送您可以从中获得的,并在其中使用它来构建您的。以下是需要在代码中进行的更改。

  • tar [-]c|x|u|r|t[z|j][v] -f 归档文件 [待打包文件] 将多个文件打包为一个归档文件,可以在打包的同时进行压缩。支持的格式为 tar(归档)、gz(压缩)、bz2(压缩率更高,比较耗时) 操作选项 -c 创建 -x 解包 -u 更新 -r 添加 -t 查看 -d 比较压缩包内文件和文件 -A 将 tar 文件添加到归档文件中 格式选项 -z 使用 gz 压缩格式 -j 使

  • 本文向大家介绍C#自定义字符串压缩和解压缩的方法,包括了C#自定义字符串压缩和解压缩的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#自定义字符串压缩和解压缩的方法。分享给大家供大家参考。具体如下: 代码使用方法: 希望本文所述对大家的C#程序设计有所帮助。

  • 问题内容: 我怀疑这是否是加密,但是找不到更好的短语。 我需要像这样传递一个长查询字符串: 查询字符串不包含任何敏感信息,因此在这种情况下我并不真正担心安全性。只是…好,太长且太丑陋。是否有一个库函数可以让我将查询字符串编码/加密/压缩为类似于md5()的结果(类似于,总是32个字符串),但是可以解码/解密/解压缩? 问题答案: 基本前提是非常困难的。在URL中传输任何值意味着您只能使用ASCII