BufferedInputStream Sınıfı java.lang.Object java.io.InputStream java.io.FilterInputStream java.io.BufferedInputStream public class BufferedInputStream extends FilterInputStream Bir BufferedInputStream nesnesi yaratılınca bir buffer array’i yaratılmış olur. Bu nesne giriş eylemine ek olarak mark() ve reset() metotlarını da kullanır. Giriş akımından byte okundukça ya da atlandıkça (skip) yaratılan buffer array’inin bileşenlerine yazılır. Bir seferde birden çok byte okunabilir. mark() metodu giriş akımının neresinde olunduğunu işaretler. Eğer reset() metodu çalışırsa, son okunan işaretli (marked) yerden önceki işaretin bulunduğu yerden okuma tekrarlanır. Adından da anlaşılacağı gibi, buffer’daki verilerin okunmasını sağlar. Buffer bir bellek alanı olduğundan, oradan veri okumak demek, bellekten veri okumak demektir. Dolayısıyla, başka bir giriş kanalından veri okumaya göre çok daha hızlıdır. BufferedInputStream sınıfı InputStream sınıfının bütün metotlarını kullanır. Ayrıca şu iki metoda sahiptir: Veri alanları (değişkenleri): protected byte[] buf Giren verinin konulacağı buffer. protected int count Buffer’a en son giren byte’ın indisinden sonraki indis. protected int marklimit Mark metodu çağrıldıktan sonra (ve reset() metodu çağrılmadan önce) en çok kaç byte okunacağını belirler. protected int markpos Son işaretli yer çağrıldığında pos değişkeninin yeri. protected int pos Buffera giren son byte’ın yeri. Kurucuları: BufferedInputStream(InputStream in) Bir BufferedInputStream nesnesi yaratır, ana bellekte giriş akımından gelen verilerin yerleşeceği bir buffer oluşturur, onu buf değikenine atar. Buffer büyüklüğü öntanımlıdır (default). in parametresi giriş akımını belirler. BufferedInputStream(InputStream in, int size) 1 Bir BufferedInputStream nesnesi yaratır, ana bellekte giriş akımından gelen verilerin yerleşeceği ve uzunluğu size olan bir buffer oluşturur. in parametresi giriş akımını belirler Örnek: package scanner; import java.io.*; public class FileOps { public static String fileToString(String infile) { try { BufferedReader reader = new BufferedReader(new FileReader(infile)); String result = ""; String line = reader.readLine(); while (line != null) { result = result + line + '\n'; line = reader.readLine(); } reader.close(); return result; } catch (IOException ex) { System.out.println(ex); return ""; } } public static void stringToFile(String outfile, String contents) { try { BufferedWriter writer = new BufferedWriter(new FileWriter(outfile)); // fileWriter yarat writer.write(contents); // text dosyaya yazılıyor writer.close(); // } catch (IOException ex) { System.out.println(ex); } } public static void main(String[] args) { stringToFile("ddd.txt", "ist 365 Java Programlama Dili"); } } /** * ist 365 Java Programlama Dili */ 2 import java.io.BufferedReader; import java.io.InputStreamReader; public class MainClass { public static void main(String args[]) { try { InputStreamReader isr = new InputStreamReader(System.in); BufferedReader br = new BufferedReader(isr); while (true) { System.out.print("Radius? "); String str = br.readLine(); double radius; try { radius = Double.valueOf(str).doubleValue(); } catch (NumberFormatException nfe) { System.out.println("Incorrect format!"); continue; } if (radius <= 0) { System.out.println("Radius must be positive!"); continue; } double area = Math.PI * radius * radius; System.out.println("Area is " + area); return; } } catch (Exception e) { e.printStackTrace(); } } } /** Yarıçap : 3.6 Alan : 40.71504079052372 */ import java.io.*; public class Demo { public static void main (String[] args) { System.out.print("Adınız : "); // standart giriş akımı BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String ad = null; 3 try { ad = br.readLine(); } catch (IOException ioe) { System.out.println("Giriş hatası!"); System.exit(1); } System.out.println("Teşekkürler, " + ad); } } /** Adınız : Yasemin Teşekkürler, Yasemin */ Örnek: tipinden olan System.in değişkeni önce InputStreamReader sınıfına gömülüyor. Sonra bu sınıf BufferedReader sınıfına gömülüyor. Böylece, BufferedReader sınıfının metotlarını kullanma olanağı yaratılıyor. InputStream class Demo { public static void main(String[] args) throws IOException { InputStreamReader isr = new InputStreamReader(System.in); BufferedReader input = new BufferedReader(isr); String line; // girilen satırları tutar // satırları okur ve yazar // Durmak için EOF: control-Z (Windows), control-D (ötekiler) while ((line = input.readLine()) != null) { System.out.println(line); // satırları yazar } } } Örnek: Program 4. Klâvyeden BufferReader ’a Giriş import java.io.*; public class karekok{ public static void main (String[] args) throws IOException { BufferedReader stdin=new BufferedReader (new InputStreamReader(System.in)); 4 double root1, root2; double rootca, rootcb; System.out.println("Enter the coefficient of x^2 :"); int a=Integer.parseInt(stdin.readLine()); System.out.println("Enter the coefficient of x :"); int b=Integer.parseInt(stdin.readLine()); System.out.println("Enter the constant value :"); int c=Integer.parseInt(stdin.readLine()); double delta, deltasqrt; delta = b*b -4*a*c ; if (delta >= 0) { deltasqrt = Math.sqrt(delta); root1 = (-b+deltasqrt)/(2*a); root2 = (-b-deltasqrt)/(2*a); System.out.println("The roots are : " + root1 + " and " + root2); } else { deltasqrt = Math.sqrt(-delta); rootca = deltasqrt/(2*a); rootcb = deltasqrt/(2*a); System.out.println("The roots are : " + -b/(2*a) + "+i" +rootca + " and " + -b/(2*a) + "-i" + rootcb); } } } /* Açıklamalar: public String readLine() throws IOException Bir satırlık metin okur. Satır bitişi aşağıdakilerden birisiyle olur: ‘\n’ : yeni satır (line feed) , ‘\r’ : satırbaşı (carriage return), ya da satırbaşını hemen izleyen yeni satır */ Program: Klâvyeden Buffer’a Giriş // BufferedReader ile klâvyeden karakter okuma 5 import java.io.*; class BRRead { public static void main(String args[]) throws IOException { char c; BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); System.out.println("Metin gir; durmak için 'q' yaz."); // karakter oku do { c = (char) br.read(); System.out.println(c); } while(c != 'q'); } } /* Açıklamalar: public int read() throws IOException Her seferinde bir karekter okur. */ Program: Klâvyeden BufferedReader ile metin girişi // BufferedReader ile bir metin girişi. import java.io.*; class BRReadLines { public static void main(String args[]) throws IOException { // create a BufferedReader using System.in BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str; System.out.println("Bir satır yaz."); System.out.println("Durmak için 'stop' yaz."); do { str = br.readLine(); System.out.println(str); } while(!str.equals("stop")); } } /* public String readLine() throws IOException 6 Bir satırlık metin okur. Satır bitişi aşağıdakilerden birisiyle olur: ‘\n’ : yeni satır (line feed) , ‘\r’ : satırbaşı (carriage return), ya da satırbaşını hemen izleyen yeni satır */ Program: Klâvyeden BufferedReader ’a Giriş // Basit bir editor. import java.io.*; class TinyEdit { public static void main(String args[]) throws IOException { // create a BufferedReader using System.in BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); String str[] = new String[100]; System.out.println("Bir satır yaz."); System.out.println("Durmak için yeni bir satıra 'dur' yaz."); for(int i=0; i<100; i++) { str[i] = br.readLine(); if(str[i].equals("dur")) break; } System.out.println("\n Yazdığınız metin budur:"); // display the lines for(int i=0; i<100; i++) { if(str[i].equals("dur")) break; System.out.println(str[i]); } } } 7