从Netty中的FullHttpResponse byteBuf获取字符串内容

时间:2019-04-04 07:25:04

标签: netty

我尝试了各种口味,并且都给出了令人满意的结果。 但是浏览器上的响应看起来不错。 (干净的json字符串)

    FullHttpResponse response = (FullHttpResponse) msg;
    byte[] bytes = new byte[response.content().readableBytes()];
    response.content().readBytes(bytes);
    String result = new String(bytes);

我按照建议的here尝试的另一个是

response.content().toString(CharsetUtil.UTF_8);

两者都是这样的胡言乱语

enter image description here

PS:我在管道中使用HttpObjectAggregator和HttpServerCodec

1 个答案:

答案 0 :(得分:1)

由于您正在处理FullHttpResponse的实例,因此您最有可能查看压缩的数据,并且当今大多数服务器都使用压缩,因此很有可能压缩了数据。

要查看压缩背后的压缩算法,您应该查看response.headers().get(HttpHeaders.Names.CONTENT_ENCODING)

这可以返回差值的组合(如果有多个记录,则用,分隔):

  • gzip:使用GZip压缩数据
  • `deflate:使用deflate压缩数据
  • identity:未进行压缩
  • br:使用brotli压缩数据

使用FullHttpResponse的一个优点是您不必担心正在使用的传输编码,因为它可以为您处理。