我想讀取文件作爲字節數組,並意識到讀取字節的數量取決於使用的方法。這裏的相關代碼:爲什麼getResourceAsStream()和FileInputStream讀取文件返回不同長度的數組?
public byte[] readResource() {
try (InputStream is = getClass().getClassLoader().getResourceAsStream(FILE_NAME)) {
int available = is.available();
byte[] result = new byte[available];
is.read(result, 0, available);
return result;
} catch (Exception e) {
log.error("Failed to load resource '{}'", FILE_NAME, e);
}
return new byte[0];
}
public byte[] readFile() {
File file = new File(FILE_PATH + FILE_NAME);
try (InputStream is = new FileInputStream(file)) {
int available = is.available();
byte[] result = new byte[available];
is.read(result, 0, available);
return result;
} catch (Exception e) {
log.error("Failed to load file '{}'", FILE_NAME, e);
}
return new byte[0];
}
調用File.length(),並用的FileInputStream閱讀返回21566個字節給定的測試文件的正確長度,但讀取文件作爲資源返回21622個字節。
有誰知道爲什麼我得到不同的結果,以及如何解決它,使readResource()返回正確的結果?
也許zthat是不同的文件? – Jens 2014-10-02 06:16:41
你也沒有正確讀取字節。 available()不會返回文件的長度。並且read()不保證讀取要求它讀取的字節數。閱讀Java IO教程,瞭解如何正確讀取流的所有字節。 – 2014-10-02 06:30:38
謝謝!這有幫助。 getResourceAsStream()從目標文件夾中獲取該圖像的舊版本。 – Pakkanen 2014-10-02 06:35:05