Nie należy mylić domyślnego zachowania metody InputStream i jej większości podklas. Zasada projektowania OO polega na tym, że podklasy mogą zmieniać zachowanie metody tej implementacji.
From InputStream - read (byte []) wywołuje read() wielokrotnie.
public int read(byte b[], int off, int len) throws IOException {
// code removed
for (; i < len ; i++) {
c = read();
// code removed
}
From BufferedInputStream - read (byte []) nie wywołuje read().
public synchronized int read(byte b[], int off, int len) throws IOException {
// code removed
int nread = read1(b, off + n, len - n);
// code removed
}
private int read1(byte[] b, int off, int len) throws IOException {
// code removed
return getInIfOpen().read(b, off, len);
// code removed
}
Z FileInputStream - read (byte []) nie wywołuje read().
public int read(byte b[], int off, int len) throws IOException {
return readBytes(b, off, len);
}
private native int readBytes(byte b[], int off, int len) throws IOException;
Podczas InputStream odczytuje jedną bajcie, prawie wszystkie realizacje przejdzie odczytu (bajt []) tego samego sposobu bazowego strumienia.
Uwaga: implementacje odczytu (bajt [], int, int) różnią się we wszystkich trzech przypadkach.
co mam na myśli jaśniej zadać to: Załóżmy, że chcę, aby odczytać 20 bajtów, Reading jeden bajt na raz trafi bazowy strumień (np system plików), za każdym razem w pętli co oznacza 20 razy .. ok Teraz czytając tablicę 20 bajtów za jednym zamachem, tj. za pomocą odczytu (bajt [] 20), Teraz będzie to hit strumieniem bazowym (np. system plików) jeden raz lub 20 razy ... ?? (jak podano: read (byte [] b) metoda będzie również wywoływała metodę read() wielokrotnie 20 razy)?
Czy korzystasz BufferedInputStream lub FileInputStream jeden read (byte []) powoduje atmost wezwanie jednego systemu do odczytu do byte [].
PeterLawrey: Dzięki za tak dobrze wyodrębnione wyjaśnienie. Czyli to oznacza, że wszystkie 3 metody InputStream będą odczytywać na poziomie jednego bajtu na raz, niezależnie od liczby bajtów, które określamy w bajcie (bajt [])? –
Nie, staram się wykazać szczegółowo i szczegółowo, dlaczego tak nie jest. Nie jest dla mnie jasne, dlaczego mógłbyś tak sądzić. –
Dzięki .. Teraz mam to .. –