我有一個字節數組,它包含我需要寫入文件並讀回字節數組的負數。最佳編碼方式
想象一下,我有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