Bir BufferedReader, altlık akışından verimli bir şekilde okumak için tasarlanmış basit bir sınıftır. Genel olarak, bir FileReader gibi bir Reader'dan yapılan her okuma isteği, temel akışa karşılık gelen bir okuma talebinin yapılmasına neden olur. Read () veya readLine () öğelerinin her çağrılması, baytların dosyadan okunmasına, karakterlere dönüştürülmesine ve daha sonra döndürülmesine neden olabilir, bu da çok verimsiz olabilir. Bir Reader bir BufferedReader'da çarpıtıldığında verimlilik önemli ölçüde artırılır.
BufferedReader senkronize olduğundan, bir BufferedReader'daki okuma işlemleri birden çok iş parçacığından güvenle yapılabilir.
Öte yandan bir tarayıcıda çok daha fazla peynir bulunur; bir BufferedReader'ın yapabileceği her şeyi ve aynı verimlilik seviyesinde yapabilir. Bununla birlikte, bir tarayıcı, normal ifadeler kullanarak temel türler ve dizeler için temel akışı ayrıştırabilir. Ayrıca, altta yatan akışı seçtiğiniz sınırlayıcı ile de belirtebilir. Ayrıca, sınırlayıcıyı göz ardı ederek altta yatan akışın ileri taramasını da yapabilir!
Ancak tarayıcı iş parçacığı için güvenli değildir, harici olarak senkronize edilmesi gerekir.
BufferedReader veya Tarayıcı kullanma seçeneği, basit bir günlük okuyucu yazıyorsanız, buffered okuyucu yeterlidir, yazdığınız koda bağlıdır. Ancak bir XML ayrıştırıcı yazıyorsanız Tarayıcı daha doğal bir seçimdir.
Girişi okurken bile, kullanıcı girişini satır satır kabul etmek ve sadece bir dosyaya eklemek istiyorsanız, bir BufferedReader yeterince iyidir. Öte yandan, kullanıcı girişini birden fazla seçeneğe sahip bir komut olarak kabul etmek ve ardından belirtilen komuta ve seçeneklere göre farklı işlemler gerçekleştirmek istiyorsanız, Tarayıcı daha uygun olacaktır.