繁体   English   中英

最好的编码方式

[英]Best way to encode

我有一个包含负数的字节数组,需要将其写入文件并读回字节数组。

想象一下,我有10个长度为128的字节数组,包括负数。

将十个数组写入同一文件的最佳方法是什么,以便我可以读取文件并再次创建相同的十个字节数组? 我知道总是会有长度128,所以这不是问题。

我目前尝试将它们全部放入一个字符串中,并以base 64进行编码,然后将其写入文件。 但是,当我读取文件并对其进行解码时,它似乎无法正确地解释它(第一个数组是按顺序排列的,另一个数组不是按顺序排列的)。

有任何想法吗?

只需将它们直接写到OutputStream -无需对其进行编码:

// Or wherever you get them from
byte[][] arrays = new byte[10][128];
...

for (byte[] array : arrays) {
    outputStream.write(array);
}

然后,在读取时(使用InputStream ):

byte[][] arrays = new byte[10][];
for (int i = 0; i < arrays.length; i++) {
    arrays[i] = readExactly(inputStream, 128);
}

...

private static byte[] readExactly(InputStream input, int size) throws IOException {
    byte[] ret = new byte[size];
    int bytesRemaining = size;
    while (bytesRemaining > 0) {
        int bytesRead = input.read(ret, size - bytesRemaining, bytesRemaining);
        if (bytesRead == -1) {
            throw new IOException("Ran out of data");
        }
    }
    return ret;
}

请注意,您不能只对InputStream.read发出10次调用并假定它每次将读取128个字节。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM