我有一个字节数组,它包含我需要写入文件并读回字节数组的负数。最佳编码方式
想象一下,我有10个长度为128的字节数组,包括负数。
将十个数组写入同一个文件的最佳方式是什么?这样我可以读取该文件并再次创建相同的十个字节数组?我知道总是有128的长度,所以这不是问题。
我目前尝试把它们全部放到一个字符串中,用base 64进行编码,然后写入文件。但是,当我读取文件并对其进行解码时,似乎没有正确解释它(第一个数组是按顺序的,另一个不是)。
任何想法?
我有一个字节数组,它包含我需要写入文件并读回字节数组的负数。最佳编码方式
想象一下,我有10个长度为128的字节数组,包括负数。
将十个数组写入同一个文件的最佳方式是什么?这样我可以读取该文件并再次创建相同的十个字节数组?我知道总是有128的长度,所以这不是问题。
我目前尝试把它们全部放到一个字符串中,用base 64进行编码,然后写入文件。但是,当我读取文件并对其进行解码时,似乎没有正确解释它(第一个数组是按顺序的,另一个不是)。
任何想法?
只是其中直接写出来的OutputStream
- 有没有必要对其进行编码:阅读(与InputStream
)时
// Or wherever you get them from
byte[][] arrays = new byte[10][128];
...
for (byte[] array : arrays) {
outputStream.write(array);
}
然后:
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;
}
请注意,您不能只发出10个电话给InputStream.read
,并假设它每次都会读取128个字节。
无需对它们进行编码 - 您确定吗?当我写它们时,很多负数字节值变成了'?' (63)。 – 2013-03-02 08:15:08
@BobbyBrown:只有当你试图在文本编辑器中查看它们。你真的*需要*来做到这一点吗?这是二进制数据 - 如果您想查看文件内容,请使用二进制文件编辑器。如果他们仍然*变成63,这表明数据在你写出之前已经损坏 - 这几乎可以肯定是由于将它转换为前面代码中某个字符串的原因。我的代码假设你已经得到了正确的数据开始... – 2013-03-02 08:19:49
我必须已经将某些东西转换为字符串的某处。谢谢你的提示,我会在晚些时候看看 - 这是晚了,我需要去睡觉。 – 2013-03-02 08:27:22
向我们展示您的尝试。也许我们可以解决它。 – 2013-03-02 08:09:00