Próbowałem odczytać plik do tablicy przy użyciu FileInputStream, a plik ~ 800 KB wymagał około 3 sekund, aby odczytać go w pamięci. Następnie wypróbowałem ten sam kod, z wyjątkiem FileInputStream opakowanego w BufferedInputStream i zajęło to około 76 milisekund. Dlaczego czytanie bajtów pliku przez bajt jest wykonywane o wiele szybciej za pomocą BufferedInputStream, mimo że nadal czytam bajt po bajcie? Oto kod (reszta kodu jest całkowicie nieistotna). Zauważ, że jest to "szybki" kod. można po prostu usunąć BufferedInputStream jeśli chcesz „powolny” Kod:Dlaczego użycie BufferedInputStream do odczytywania bajtu pliku przez bajt jest szybsze niż użycie FileInputStream?
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 jest ponad 30 razy szybciej. Znacznie więcej. Dlaczego tak jest i czy można uczynić ten kod bardziej wydajnym (bez korzystania z zewnętrznych bibliotek)?
Aah Widzę, powinienem był najpierw sprawdzić API przed pytaniem. Jest to po prostu wewnętrzny bufor 8K. To ma sens. Dzięki. Jeśli chodzi o część "bardziej wydajną", nie jest to konieczne, ale myślałem, że mój kod mógł być w jakiś sposób nadmiernie nadmiarowy. Myślę, że to nie jest. – ZimZim
@ user1007059 Nie ma za co. Zauważ, że jeśli zamiast tego użyłeś metody 'read (byte [], int, int)' z '' byte [], int, int) '' byte [> 8192] 'nie musiałbyś owijać pliku' BufferedInputStream'. –
@SotiriosDelimanolis Kiedy używać bajtu 'read() bajt po bajcie i kiedy używać bajtu' read (byte []) '. Myślę, że czytanie tablicy jest zawsze lepsze. następnie możesz podać przykład użycia bajtów 'read()' bajt po bajcie OR 'read (byte [])' bajt. OR 'BufferedInputStream'.? – UnKnown