如何将保存在字符串中的 Longs 改回 Longs

How to change Longs saved in a String back to Longs

我想做的是将4x8bytes保存为64bit Long。 并再次将 64bit Long 解码为 4x8bytes。

我知道你可能不明白,但我有一个编码器,它使用字节 8 位组成 64 位 Long。 我正在保存其中的多个示例:“-223784 2432834 -34233566” 我想读取每个数字,当“”是字符时将其拆分并将其放入 long[].

目前我有这个代码:

FileInputStream fin = new FileInputStream( IOUtils.path + File.separator + "eclipse.hm" );
    String c = "";
    long[] longs = new long[1000000];

    int b,ggg=0;
    while((b=fin.read())!=-1) {
        if( (char)b==' ' ) {
            longs[ggg++] = Long.parseLong(c);
            c = "";
        } else {
            c+=(char) b;
        }
        fetched++;
    }
    fin.close();

我的"Decoder"方法如下:

public static Object decode(long[] input) throws DataFormatException, IOException, ClassNotFoundException {
    byte[] toInflate = BitSet.valueOf(input).toByteArray();

    Inflater inflater = new Inflater();
    inflater.setInput(toInflate);

    byte[] deflated = new byte[ toInflate.length*2 ];
    inflater.inflate(deflated);
    inflater.end();

    ObjectInputStream ois = new ObjectInputStream( new ByteArrayInputStream(deflated) );
    Object r = ois.readObject();
    ois.close();
    return r;
}

解码器工作 我已经用我的编码器测试过它并直接输入编码器的输出。 所以一定是读错了。

我简直无言以对,而且我也没有任何想法来解决这个问题...

感谢您的帮助,真诚的 Richee。

您可以使用一些内置的字符串函数来拆分字符串。之后,您需要对拆分步骤后获得的所有元素进行一些从字符串到长整型的转换。

为了解决这个问题,我尝试从我的编码器和解码器 (Inflater) 中移除 Deflater。 之后它起作用了,所以现在我想知道为什么 Deflater/Inflater "destroy" 我的 StreamHeader....

无论如何,很抱歉占用您的时间...