我有一個文件,我的Java應用程序作爲輸入,我一次讀取6個字節。當我從文件系統中讀取它時,一切正常。如果我將所有內容都構建到一個jar中,第一個4868的讀取工作正常,但在此之後它開始以錯誤的順序返回字節數組,並最終在最後讀取更多數據。我得到不同的結果從文件系統和從罐子裏讀取相同的文件
這裏是我的代碼的簡化版本,它再現了問題:
InputStream inputStream = this.getClass().getResourceAsStream(filePath);
byte[] byteArray = new byte[6];
int counter = 0;
while ((inputStream.read(byteArray) != -1))
{
counter++;
System.out.println("Read #" + counter +": " + Arrays.toString(byteArray));
}
System.out.println("Done.");
這是[縮寫]輸出閱讀過的文件系統時,我得到:
...
Read #4867: [5, 0, 57, 7, 113, -26]
Read #4868: [2, 0, 62, 7, 114, -26]
Read #4869: [2, 0, 68, 7, 115, -26]
Read #4870: [3, 0, 75, 7, 116, -26]
Read #4871: [2, 0, 83, 7, 117, -26]
...
Read #219687: [1, 0, 4, -8, 67, 33]
Read #219688: [1, 0, 2, -8, 68, 33]
Read #219689: [5, 0, 1, -8, 67, 33]
Done.
這裏是我從罐子裏讀到的東西:
...
Read #4867: [5, 0, 57, 7, 113, -26]
Read #4868: [2, 0, 62, 7, 113, -26] //everything is fine up to this point
Read #4869: [7, 114, -26, 2, 0, 68]
Read #4870: [7, 115, -26, 3, 0, 75]
Read #4871: [7, 116, -26, 2, 0, 83]
...
Read #219687: [95, 33, 1, 0, 78, -8]
Read #219688: [94, 33, 1, 0, 76, -8]
Read #219689: [95, 33, 1, 0, 74, -8]
...
Read #219723: [67, 33, 1, 0, 2, -8]
Read #219724: [68, 33, 5, 0, 1, -8]
Read #219725: [67, 33, 5, 0, 1, -8]
Done.
我解壓縮了jar並確認文件被閱讀的內容是完全相同的,那麼可能會導致讀者返回不同的結果?
我會檢查read()總是返回6.如果你得到一個不同的數字,它不會讀取6個新的字節。 –