(ama OP zamanda ilgili): (
BufferedReader reader = new BufferedReader(new InputStreamReader(new BufferedInputSream(inputStream), "UTF-8"));
BufferedInputStream
gereksiz olduğu ve Muhtemelen gereksiz kopyalama nedeniyle performansa zarar verir). Bunun nedeni BufferedReader
, InputStreamReader.read(char[], int, int)
numaralı çağırarak, numaralı çağırarak, büyük karakterleri karakterleri, , InputStream.read(byte[], int, int)
, altta yatan InputStream
büyük bir bayt bloğu okumak için çağırır.
Bu aşağıdaki kodu çalıştırarak olduğunu kendinizi ikna edebilirsiniz:
new BufferedReader(new InputStreamReader(new ByteArrayInputStream("Hello world!".getBytes("UTF-8")) {
@Override
public synchronized int read() {
System.err.println("ByteArrayInputStream.read()");
return super.read();
}
@Override
public synchronized int read(byte[] b, int off, int len) {
System.err.println("ByteArrayInputStream.read(..., " + off + ", " + len + ')');
return super.read(b, off, len);
}
}, "UTF-8") {
@Override
public int read() throws IOException {
System.err.println("InputStreamReader.read()");
return super.read();
}
@Override
public int read(char[] cbuf, int offset, int length) throws IOException {
System.err.println("InputStreamReader.read(..., " + offset + ", " + length + ')');
return super.read(cbuf, offset, length);
}
}).read(); // read one character from the BufferedReader
Aşağıdaki çıktıyı göreceksiniz:
InputStreamReader.read(..., 0, 8192)
ByteArrayInputStream.read(..., 0, 8192)
Bu gösteriyor ki karakterlerden BufferedReader
istekleri Büyük bir bölümü InputStreamReader
'dan itibaren, temel olarak InputStream
'dan büyük bir bayt yığını talep eder. Eğer Java 8'de bir dosyayı açıyorsunuz eğer
Temeldeki InputStream bir FileInputStream ise, iki Okuyucu, tüm okuma süreci boyunca farklı disk okuma değerleri gerçekleştirir mi? – bdkosher
Ben perfmon kullanarak kontrol ettim, fark edilebilir farklar görmüyorum.Bir karşılaştırma kodu snippet'i eklemek için cevabı yakında güncelleyeceğim. – BalusC
Paket adı gibi büyük :) –