2013-03-02 85 views
0

我有一個字節數組,它包含我需要寫入文件並讀回字節數組的負數。最佳編碼方式

想象一下,我有10個長度爲128的字節數組,包括負數。

將十個數組寫入同一個文件的最佳方式是什麼?這樣我可以讀取該文件並再次創建相同的十個字節數組?我知道總是有128的長度,所以這不是問題。

我目前嘗試把它們全部放到一個字符串中,用base 64進行編碼,然後寫入文件。但是,當我讀取文件並對其進行解碼時,似乎沒有正確解釋它(第一個數組是按順序的,另一個不是)。

任何想法?

+1

向我們展示您的嘗試。也許我們可以解決它。 – 2013-03-02 08:09:00

回答

3

只是其中直接寫出來的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個字節。

+0

無需對它們進行編碼 - 您確定嗎?當我寫它們時,很多負數字節值變成了'?' (63)。 – 2013-03-02 08:15:08

+0

@BobbyBrown:只有當你試圖在文本編輯器中查看它們。你真的*需要*來做到這一點嗎?這是二進制數據 - 如果您想查看文件內容,請使用二進制文件編輯器。如果他們仍然*變成63,這表明數據在你寫出之前已經損壞 - 這幾乎可以肯定是由於將它轉換爲前面代碼中某個字符串的原因。我的代碼假設你已經得到了正確的數據開始... – 2013-03-02 08:19:49

+0

我必須已經將某些東西轉換爲字符串的某處。謝謝你的提示,我會在晚些時候看看 - 這是晚了,我需要去睡覺。 – 2013-03-02 08:27:22