【问题标题】:Best way to encode最好的编码方式
【发布时间】:2013-03-02 08:05:41
【问题描述】:

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

假设我有 10 个长度为 128 的字节数组,包括负数。

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

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

有什么想法吗?

【问题讨论】:

  • 向我们展示您的尝试。也许我们可以解决它。

标签: java file base64 bytearray encode


【解决方案1】:

只需将它们直接写到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 个字节。

【讨论】:

  • 不需要对它们进行编码——你确定吗?当我写它们时,很多负字节值都变成了“?” (63).
  • @BobbyBrown:仅当您尝试在文本编辑器中查看它们时。你真的需要这样做吗?这是二进制数据 - 如果要查看文件内容,请使用二进制文件编辑器。如果它们仍然变为 63,则表明数据在您写出之前已损坏 - 这几乎肯定是由于在前面的代码中将其转换为字符串。我的代码假设您已经获得了正确的数据以开始...
  • 我一定在某处将某些东西转换为字符串。感谢您的提示,我稍后再研究一下——时间不早了,我需要睡觉了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-01-23
  • 1970-01-01
  • 2011-02-18
  • 1970-01-01
  • 2013-04-07
  • 1970-01-01
  • 2011-05-10
相关资源
最近更新 更多