Ich habe versucht, eine Datei mithilfe von FileInputStream in ein Array einzulesen, und das Einlesen einer ~ 800-KB-Datei in den Speicher dauerte ca. 3 Sekunden. Ich habe dann den gleichen Code ausprobiert, außer dass der FileInputStream in einen BufferedInputStream eingewickelt war und es ungefähr 76 Millisekunden dauerte. Warum wird das Lesen einer Datei byteweise mit einem BufferedInputStream so viel schneller durchgeführt, obwohl ich sie immer noch byteweise lese? Hier ist der Code (der Rest des Codes ist völlig irrelevant). Beachten Sie, dass dies der "schnelle" Code ist. Sie können den BufferedInputStream einfach entfernen, wenn Sie den "langsamen" Code möchten:
InputStream is = null;
try {
is = new BufferedInputStream(new FileInputStream(file));
int[] fileArr = new int[(int) file.length()];
for (int i = 0, temp = 0; (temp = is.read()) != -1; i++) {
fileArr[i] = temp;
}
BufferedInputStream ist über 30-mal schneller. Weit mehr als das. Warum ist das so und ist es möglich, diesen Code effizienter zu gestalten (ohne externe Bibliotheken zu verwenden)?