【问题标题】:java.io.IOException: unknown formatjava.io.IOException:未知格式
【发布时间】:2017-05-24 18:31:32
【问题描述】:

我使用下面的代码解压缩通过socket.io 到达的数据。

当解压缩以压缩形式发送的数据时,下面的代码效果很好。 (从 Node.js 发送的伪数据:<Buffer a8 b2 ...>

但是,当解压缩在 JSONArray 中发送的数据时,我收到 java.io.IOException: unknown format 错误。 (从 Node.js 发送的伪数据:[<Buffer a8 b2 ..>, <Buffer c4 f0 ..>]

mSocket.on("fired", new Emitter.Listener() {
    @Override
    public void call(final Object... args) {
        JSONArray compressedDataArray = (JSONArray) args[0];
        byte[] compressedData = compressedDataArray.getString(0).toString().getBytes();
        String unzipped = new String(decompress(compressedData));
        Log.v("SAMPLE_TAG", "unzipped: " + unzipped) // LOGGING THE RESULT
    }
})


public byte[] decompress(byte[] data) throws IOException {
    ByteArrayOutputStream byteArrayOS = new ByteArrayOutputStream();
    GZIPInputStream gzipIS = new GZIPInputStream(new ByteArrayInputStream(data));

    byte[] buffer = new byte[1024];

    int len;
    while ((len = gzipIS.read(buffer)) > 0) {
      byteArrayOS.write(buffer, 0, len);
    }

    byteArrayOS.close();
    gzipIS.close();

    return byteArrayOS.toByteArray();
  }

有没有机会克服这个问题?

【问题讨论】:

  • 解压未压缩的 JSONArray 的原因是什么?
  • 我已将数据压缩存储在 Redis 上。在某些情况下,我必须向用户返回多个压缩数据。因此,我将压缩后的数据添加到数组中,然后发送。
  • 另一句话compressedDataArray.getString(0).toString() 最后一个toString() 似乎是多余的。 getString(index) 已经返回 String
  • 您有一个包含压缩数据的 JSON 数组。 1)我没有看到您遍历 JSON 数组。 2)独立于你有一个或n个压缩元素,将它们作为包含n个压缩数据元素的JSON数组发送,这样你就可以平等对待它们。
  • 即使元素被压缩,也无法解压未压缩的数组。您只能解压缩压缩的元素。相继。始终为您的数据使用相同的结构/抽象,以便您可以轻松处理它们。一种可能的抽象是始终使用与元素数量无关的压缩元素数组。

标签: java socket.io gzip gzipinputstream socket.io-java-client


【解决方案1】:

我已经通过更改下面的行来解决这个问题:

byte[] compressedData = compressedDataArray.getString(0).toString().getBytes();

改为:

byte[] compressedData = (byte[]) compressedDataArray.get(0);

然后就可以了。

【讨论】:

  • 是调用 .toString() 使第一条语句失败。只需将其删除,它应该可以正常工作。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-10
  • 2011-08-30
  • 2016-07-02
  • 1970-01-01
  • 1970-01-01
  • 2010-11-06
相关资源
最近更新 更多