Bu eğitimde, örnekler yardımıyla Java BufferedInputStream ve yöntemleri hakkında bilgi edineceğiz.
BufferedInputStream
Sınıf java.io
paketi daha verimli (bayt) veri okumak için diğer giriş akımları ile birlikte kullanılır.
InputStream
Soyut sınıfı genişletir .
BufferedInputStream'in Çalışması
BufferedInputStream
Bir iç muhafaza 8192 bayt tamponu .
Okuma işlemi sırasında, BufferedInputStream
diskten bir bayt yığını okunur ve dahili tamponda saklanır. Ve dahili tampon baytlarından ayrı ayrı okunur.
Böylelikle diskle iletişim sayısı azalır. Bu nedenle bayt okumak daha hızlıdır BufferedInputStream
.
BufferedInputStream Oluşturun
Bir oluşturmak için BufferedInputStream
önce java.io.BufferedInputStream
paketi içe aktarmalıyız . Paketi burada içe aktardıktan sonra, giriş akışını nasıl oluşturabiliriz.
// Creates a FileInputStream FileInputStream file = new FileInputStream(String path); // Creates a BufferedInputStream BufferedInputStream buffer = new BufferInputStream(file);
Yukarıdaki örnekte, adlandırılmış dosya BufferdInputStream
ile adlandırılmış bir tampon oluşturduk FileInputStream
.
Burada, dahili arabelleğin varsayılan boyutu 8192 bayttır. Bununla birlikte, dahili tamponun boyutunu da belirleyebiliriz.
// Creates a BufferedInputStream with specified size internal buffer BufferedInputStream buffer = new BufferInputStream(file, int size);
Arabellek, dosyalardan baytların daha hızlı okunmasına yardımcı olacaktır.
BufferedInputStream Yöntemleri
BufferedInputStream
Sınıf, farklı yöntemler için uygulamalar içinde mevcut içerir InputStream
sınıfı.
read () Yöntem
read()
- giriş akışından tek bir bayt okurread(byte() arr)
- akıştan bayt okur ve belirtilen dizide depolarread(byte() arr, int start, int length)
- akışın uzunluğuna eşit bayt sayısını okur ve konum başlangıcından başlayarak belirtilen dizide depolar
Aşağıdaki içeriğe sahip input.txt adında bir dosyamız olduğunu varsayalım .
This is a line of text inside the file.
Dosyayı kullanarak okumaya çalışalım BufferedInputStream
.
import java.io.BufferedInputStream; import java.io.FileInputStream; class Main ( public static void main(String() args) ( try ( // Creates a FileInputStream FileInputStream file = new FileInputStream("input.txt"); // Creates a BufferedInputStream BufferedInputStream input = new BufferedInputStream(file); // Reads first byte from file int i = input .read(); while (i != -1) ( System.out.print((char) i); // Reads next byte from the file i = input.read(); ) input.close(); ) catch (Exception e) ( e.getStackTrace(); ) ) )
Çıktı
Bu, dosyanın içindeki bir metin satırıdır.
Yukarıdaki örnekte, ile birlikte buffer adında bir tamponlu girdi akışı oluşturduk FileInputStream
. Giriş akışı, input.txt dosyasıyla bağlantılıdır .
FileInputStream file = new FileInputStream("input.txt"); BufferedInputStream buffer = new BufferedInputStream(file);
Burada, read()
tamponlu okuyucunun dahili tamponundan bir bayt dizisini okumak için yöntemi kullandık .
available () Yöntem
Giriş akışındaki kullanılabilir bayt sayısını elde etmek için available()
yöntemi kullanabiliriz . Örneğin,
import java.io.FileInputStream; import java.io.BufferedInputStream; public class Main ( public static void main(String args()) ( try ( // Suppose, the input.txt file contains the following text // This is a line of text inside the file. FileInputStream file = new FileInputStream("input.txt"); // Creates a BufferedInputStream BufferedInputStream buffer = new BufferedInputStream(file); // Returns the available number of bytes System.out.println("Available bytes at the beginning: " + buffer.available()); // Reads bytes from the file buffer.read(); buffer.read(); buffer.read(); // Returns the available number of bytes System.out.println("Available bytes at the end: " + buffer.available()); buffer.close(); ) catch (Exception e) ( e.getStackTrace(); ) ) )
Çıktı
Başlangıçta mevcut bayt sayısı: 39 Sonda kullanılabilir bayt sayısı: 36
Yukarıdaki örnekte,
- İlk
available()
olarak, giriş akışındaki kullanılabilir bayt sayısını kontrol etmek için yöntemi kullanırız . - Ardından,
read()
giriş akımından 3 bayt okumak için yöntemi 3 kez kullandık. - Şimdi, baytları okuduktan sonra, kullanılabilir baytları tekrar kontrol ettik. Bu sefer kullanılabilir bayt sayısı 3 azaldı.
skip () Yöntemi
Belirtilen bayt sayısını atmak ve atlamak için skip()
yöntemi kullanabiliriz . Örneğin,
import java.io.FileInputStream; import java.io.BufferedInputStream; public class Main ( public static void main(String args()) ( try ( // Suppose, the input.txt file contains the following text // This is a line of text inside the file. FileInputStream file = new FileInputStream("input.txt"); // Creates a BufferedInputStream BufferedInputStream buffer = new BufferedInputStream(file); // Skips the 5 bytes buffer.skip(5); System.out.println("Input stream after skipping 5 bytes:"); // Reads the first byte from input stream int i = buffer.read(); while (i != -1) ( System.out.print((char) i); // Reads next byte from the input stream i = buffer.read(); ) // Closes the input stream buffer.close(); ) catch (Exception e) ( e.getStackTrace(); ) ) )
Çıktı
5 baytı atladıktan sonra giriş akışı: dosyanın içindeki bir metin satırıdır.
Yukarıdaki örnekte, skip()
dosya giriş akışından 5 baytı atlamak için yöntemi kullandık . Bu nedenle, bayt 'T'
, 'h'
, 'i'
, 's'
ve ' '
giriş akımından atlanır.
close () Yöntem
Tamponlu giriş akışını kapatmak için close()
yöntemi kullanabiliriz . Bir kez close()
yöntemi olarak adlandırılır, veriler okuma giriş akışı kullanamaz.
Diğer Tamponlu Giriş Akışı Yöntemleri
Yöntemler | Açıklamalar |
---|---|
mark() | verinin okunduğu giriş akışındaki konumu işaretleyin |
reset() | denetimi giriş akışında işaretin ayarlandığı noktaya döndürür |
Daha fazla bilgi edinmek için Java BufferdInputStream'i (resmi Java belgeleri) ziyaret edin.