InputStream Sınıfı. Class InputStream. java.io. java.lang.object java.io.inputstream. Kılgıladığı Arayüzleri: Closeable, AutoCloseable

Benzer belgeler
CharArrayReader. Kılgıladığı Arayüzler: Bildirimi: Değişkenleri (fields): java.io.reader Sınıfından Kalıtsal Gelen Değişken:

// hataları işaret eden referans

ByteArrayOutputStream

BufferedReader. Kılgıladığı Arayüzler: Closeable, AutoCloseable, Readable. Altsınıfları: LineNumberReader. Bildirimi: public class BufferedReader

JAVA DA GİRİŞ/ÇIKIŞ İŞLEMLERİ. Altuğ B. Altıntaş 2003 Java ve Yazılım Tasarımı - Bölüm 9 1

protected Reader() Karekter akımı okumak için Reader nesnesi yaratır. Yaratılan nesne kendi kendisiyle eşzamanlı olur.

Klavyeden Basit Giriş/Çıkış İşlemleri

java.io Paketi Bölüm Java'da Giri³/Çk³ ³lemleri (I/O) Ksa Tarihçe

1. Aşağıdaki program parçacığını çalıştırdığınızda result ve param değişkenlerinin aldığı en son değerleri ve programın çıktısını yazınız.

NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 11

BİL-141 Bilgisayar Programlama I (Java)

while(), do-while(), for() M.İLKUÇAR 2010 MAKU-MYO

Görsel Programlama DERS 03. Görsel Programlama - Ders03/ 1

BMÜ-112 ALGORİTMA VE PROGRAMLAMA-II LABORATUARI DENEY-2 FÖYÜ

İlgili Konular: Object.equals(java.lang.Object), Object.hashCode(), rehash(), Collection, Map, HashMap, TreeMap, Serialized Form

BMÜ-101 ALGORİTMA VE PROGRAMLAMAYA GİRİŞ LABORATUARI

Scanner Sınıfı. Class Scanner. java.util. java.lang.object java.util.scanner. Kılgıladığı Arayüzler: Closeable, AutoCloseable, Iterator<String>

BIL1202 ALGORİTMA VE PROGRAMLAMAYA GİRİŞ

Yığıtın en üstündeki öğeyi değer olarak alır; ama onu yığıttan almaz, yerinde bırakır.

BİL132 Bilgisayar Programlama II

Merge (Bireşim) Algoritmayı önce bir örnek üzerinde açıklayalım.

Progress Barlı, FTP Dosya Upload Appleti

Kodlanacak programlama dilinin kaynaklarından faydalanılarak kod yazımı yapılır.

İST 264 VERİ YAPILARI Bitirme Sınavı A Grubu

Kodlanacak programlama dilinin kaynaklarından faydalanılarak kod yazımı yapılır.

BMÜ-111 ALGORİTMA VE PROGRAMLAMA AKIŞ KONTROLÜ YRD. DOÇ. DR. İLHAN AYDIN

JAVA PROGRAMLAMA DİLİ ÖZELLİKLERİ

BİL-141 Bilgisayar Programlama I (Java)

Ders - 7 while döngüsü

İçerik. Temel Kavramlar. Nesne Nedir? 1. Nesne : Örnek. Nesne Nedir? 2. Geçen hafta: Bu hafta: BBS-515 Nesneye Yönelik Programlama

ArrayList Uygulamaları

D İ Z İ L E R A R R A Y S

Temel Kavramlar BBS-515 Nesneye Yönelik Programlama

Programın Akışının Denetimi. Bir arada yürütülmesi istenen deyimleri içeren bir yapıdır. Söz dizimi şöyledir:

Java Programlama Dilinde Veri Tipleri. Yrd. Doç. Dr. Aybars UĞUR

Karşılaştırma İşlemleri ve Koşullu İfadeler

/*Aşağıda ki kodları doğru şekilde anlar ve kullanırsanız java da sınıfları biraz da olsa anlamış olursunuz.*/

Uzaktan Eğitim Uygulama ve Araştırma Merkezi

Đlgili konular: Collection, Set, HashSet, Comparable, Comparator, TreeMap, Collections.synchronizedSortedSet(SortedSet), Serialized Form

DÖNGÜLER (LOOPS) while(), do-while(), for(), foreach()

Java da İşleçler, Ders #3 (4 Kasım 2009)

İçerik. Java da İşleçler, İşleçler. Aritmetik İşleçler - 1. Aritmetik İşleçler - 2. Geçen ders: Bu ders: BS-515 Nesneye Yönelik Programlama

JAVA DA İSTİSNALAR VE DOSYA İŞLEMLERİ. Yrd. Doç.Dr. İlhan AYDIN

Java ile Nesneye Yönelik Programlama (Object Oriented Programming)

BİL-141 Bilgisayar Programlama I (Java)

Pascalda oluşturulacak dosyalar değişkenler gibi programın başında tanımlanır.

BM-209 Nesne Yönelimli Programlama

İÇİNDEKİLER VII İÇİNDEKİLER


NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 8. Yrd.Doç.Dr.Hacer Karacan

Java String İşlemleri

Java: printf() Metodu İle Çıktıyı Biçemleme

DÖNGÜLER BMÜ-101 ALGORİTMA VE PROGRAMLAMAYA GİRİŞ LABORATUARI BMÜ-101 ALGORİTMA VE PROGRAMLAMAYA DENEY-4 FÖYÜ GİRİŞ LABORATUARI.

Dizi türündeki referanslar, dizi nesnelerine bağlanmaktadır. Dizi referansları tanımlamak bu dizinin hemen kullanılacağı anlamına gelmez...

Class HashMap. Class HashMap java.lang.object java.util.abstractmap java.util.hashmap. Kılgıladığı Arayüzler: Cloneable, Map, Serializable

Java Class Yapısında Finalize Metotunun Kullanımı

İNÖNÜ ÜNİVERSİTESİ MÜH. FAK. BİLGİSAYAR MÜH. BÖL. ALGORİTMA VE PROGRAMLAMA 2 DERSİ LAB. ÖDEVİ

Çoktan Seçmeli Değerlendirme Soruları Akış Şemaları İle Algoritma Geliştirme Örnekleri Giriş 39 1.Gündelik Hayattan Algoritma Örnekleri 39 2.Say

DÖNGÜLER BMÜ-111 ALGORİTMA VE PROGRAMLAMA-I YRD. DOÇ. DR. İLHAN AYDIN

Bire-bir Sahiplik İlişkisi ile İlgili Sorular:

NESNEYE YÖNELİK PROGRAMLAMA

Interface Comparator. Kılgılayan sınıf: Collator. Bildirimi: public interface Comparator

Class HashSet. Metotlar. Class HashSet java.lang.object java.util.abstractcollection java.util.abstractset java.util.hashset

Örnek 1: Programı yazın ve çalıştırın.

Cybersoft Bilişim Teknolojileri Sunucu Tarafı Programlaması Kursu Final soruları. Tarih: 27 Kasım 2010 Saat: 13:30 Süre: 3 saat

Java da Soyutlama ( Abstraction ) ve Çok-biçimlilik ( Polymorphism )

Class PriorityQueue. Class PriorityQueue<E> java.lang.object java.util.abstractcollection<e> java.util.abstractqueue<e> java.util.

Binary Search. (Yarılama) Bölüm Dizide Bir Öğe Arama

NESNE YÖNELİMLİ PROGRAMLAMA HAFTA # 10

KUYRUKLAR QUEUES. Doç. Dr. Aybars UĞUR

JAVADA DİZİ İŞLEMLERİ

BMÜ-111 Algoritma ve Programlama. Bölüm 5. Tek Boyutlu Diziler

BBS515 Nesneye Yönelik Programlama. Ders 2 Zümra Kavafoğlu

ALGORİTMA VE PROGRAMLAMA II

C# Yazım Kuralları ERCİYES. Ü. BİLGİSAYAR M. COMPUTER PROGRAMMING II 1 FEHİM KÖYLÜ

Kılgıladığı arayüzler: Serializable, Cloneable, Map<K,V>, NavigableMap<K,V>, SortedMap<K,V>

MAT213 BİLGİSAYAR PROGRAMLAMA I DERSİ Ders 1: Programlamaya Giriş

GÜZ DÖNEMİ AKT105 BİLGİSAYAR PROGRAMLAMA DERSİ 9. UYGULAMA

Belirli bir iş bir çok kez tekrarlanacaksa, programda bu iş bir kez yazılır ve döngü deyimleriyle istenildiği kadar tekrar tekrar çalıştırılabilir.

Kılgılayan Sınıflar: AbstractMap, Attributes, HashMap, Hashtable, IdentityHashMap, RenderingHints, TreeMap, WeakHashMap

Sınav Dağılım & IMKB Endeks

Görsel Programlama 1

Programlama Dillerinde Kullanılan Veri Tipleri

HSancak Nesne Tabanlı Programlama I Ders Notları

1. Her marka için 3 aylık satış toplamı nedir? (Tablodaki satır toplamları)

Eln 1001 Bilgisayar Programlama I

/*int sayi1, sayi2,toplam=0;

C# Çalışma Örnekleri

Mantıksal (Logic) Operatörler

ArrayList(int initialcapacity) Sığası (capacity) parametrenin belirlediği sayıda olan bir dizi oluşturur.

Merge Sort Bireşen Sıralama

YZM 2105 Nesneye Yönelik Programlama

Dizi ( Array ) ve Dizgi ( String )

Liskov Substitution Principle (LSP) Liskov un Yerine Gecme Prensibi KurumsalJava.com

2 ALGORİTMA VE AKIŞ DİYAGRAMLARI

Dağıtık Sistemler CS5001

Java Programlama. Diziler, Döngüler ve Karakter Katarları (String Sınıfı)

BIL101 07/11/2012 Lab5 Programlama Sorulari

Transkript:

InputStream Sınıfı java.io Class InputStream java.lang.object java.io.inputstream Kılgıladığı Arayüzleri: Closeable, AutoCloseable Altsınıfları: AudioInputStream, ByteArrayInputStream, FileInputStream, FilterInputStream, InputStream, ObjectInputStream, PipedInputStream, SequenceInputStream, StringBufferInputStream InputStream sınıfı soyut bir sınıftır. Verinin kaynağının ne olduğu değil, o kaynaktan alınan veriye nasıl erişileceği daha önemlidir. InputStream sınıfı bu işi yapar. Alt sınıfları aşağıdaki tabloda belirtilmiştir. Anımsayacağınız gibi, Java da bütün sınıflar Object sınıfından türetilir. Kaynaktaki veri tipine uyan altsınıf seçilir. Onunla kaynaktan gelecek veriler için bir giriş akımı yaratılır ve veri belleğe akıtılır. Farklı işlevlere sahip InputStream sınıfının altsınıfları aşağıdaki listeden görülebilir. Object InputStream FileInputStream PipedInputStream ByteArrayInputStream SequenceInputStream StringBufferInputStream (deprecated) ObjectInputStream AudioInputStream org.omg.corba.portable.inputstream FilterInputStream (abstract) BufferedInputStream CheckedInputStream CipherInputStream DataInputStream DeflaterInputStream DigestInputStream InflaterInputStream LineNumberInputStream (deprecated) ProgressMonitorInputStream PushbackInputStream 1

InputStream sınıfı veri girişi yapan bütün sınıfların üst sınıfıdır. Bunun alt sınıfları yukarıdaki şekilde görülmektedir. Bu sınıfın metotları aşağıda açıklanmıştır. Bu listeden görüldüğü gibi, InputStream sınıfının veri okuyan üç ayrı read() metodu vardır. abstract int read() int read(byte[] b) int read(byte[] b, int off, int len) long skip(long n) int available() synchronized void mark(int readlimit) synchronized void reset() boolean marksupported() void close() abstract int read() Parametresiz read() metodu, giriş akımında sıradaki ilk byte ı okur; ard arda kullanıldığında byte dizileri okuyacaktır. Bir byte bir karektere karşılık gelen ascii kodudur; 0 ile 255 arasında olan bir int değere sahiptir. Dolayısıyla, bir metin okunuyorsa, okunan byte ların char tipine dönüştürülmesi gerekir. Giriş akımının sonuna gelindiğinde fonksiyon 1 değerini alır. Tabii, metin okumak için, java.io.inputstream yerine java.io.reader sınıfı tercih edilmelidir. int read(byte[] b) Giriş akımından okuduğu byte verileri bufferdaki b arrayine yazar. Giriş akımının sonuna gelindiğinde 1 değerini alır. Đlk okunan byte b[0] bileşenine, ikinci okunan byte b[1] bileşenine, üçüncü okunan byte b[3] bileşenine yazılır ve böylece devam eder. Tabii, en çok b arrayinin uzunluğu kadar byte okuyabilir. int read(byte[] b, int off, int len) Önceki metoda çok benzer. Tek farkı şudur: Đlk okunan byte b[off] bileşenine, ikinci okunan byte b[off+1] bileşenine, üçüncü okunan byte b[off+2] bileşenine yazılır ve böyle devam eder. len parametresi okunacak maksimum byte sayısını belirtir. Dolayısıyla, en çok len sayıda byte okur. long skip(long n) Giriş akımından n tane byte atlanmasını sağlar. Fonksiyonun değeri atlanan byte sayısıdır. Giriş akımının sonuna gelinmişse, fonksiyon 1 değerini alır. int available() Giriş akımından okunabilecek byte sayısını verir. Kesintiye uğramadan okunabilecek veri olup olmadığını bilmek istediğimizde kullanabileceğimiz iyi bir araçtır. synchronized void mark(int readlimit) Giriş akımın neresinde bulunulduğunu işaretler. reset() metodu ile önceden işaretli (marked) yere dönülür, böylece son okunanlar tekrar okunabilir. synchronized void reset() Mark ile bir önce işaret edilen yere dönmeyi sağlar. 2

boolean marksupported() Veri akımının, mark/reset yapısını desteklenip desteklemediğini belirtir. boolean değer verir. void close() Giriş akımını kapatır ve bununla bağlantılı olan kaynakları serbest bırakır. InputStream nesnesinin işi bitince, onu işaret eden referans yok olur. Referansı yok olan nesneyi çöpçü (garbage collector) bellekten siler; böylece giriş akımı kendiliğinden kapanır. Bu nedenle, giriş akımını kapatmak için close() fonksiyonunu kullanmak zorunlu değildir. Ama, çöpçünün o işi yapmasını beklemeden, işi biten giriş akımını close() metodu ile kapatmak, söz konusu akımın kullandığı sistem kaynaklarını hemen serbest bırakacağı için, önerilen iyi bir alışkanlıktır. Java 1.5 ile gelen Scanner sınıfı yokken, yani Java 1.4 ve önceki sürümlerinde System.in ile ancak byte ya da byte dizileri okunabiliyordu. Okunan byte bir int olarak girdiği için, text okunurken her birisinin char tipine dönüştürülmesi gerektiğini söylemiştik. Bunu yapmak için şu kodlar yeterlidir: try { int xxx = System.in.read (); char c = (char) xxx; catch (IOException e) { Burada ikinci satır karekterin ascii kodunu okur, üçüncü satır onu char tipine dönüştürür. Bunu yapabilmesi için, klavyeden 8-bit ile kodlanmış karekter (örneğin ascii kodu) girileceği öngörülüyor. Java giriş/çıkış işlemlerinde oluşabilecek hatalar için daima yukarıdaki gibi bir try/catch bloku yazmak iyi bir alışkanlıktır. Bu yapıda try bloku okuma eylemini yapar. Bu sırada oluşabilecek hatayı catch bloku yakalar ve kullanıcıya iletir. Ardışık byte ları okumak için, yukarıdaki kodlar bir döngü içine alınabilir: String str = ""; while (true) { try { int xxx = System.in.read (); if (xxx == -1) break; char c = (char) xxx; str = str + c; catch (IOException e) { System.out.println ("Echo = " + str); System.in ile veri girişini daha etkin kılabilmek için, bunu InputStream sınıfı içine gömeriz, böylece o sınıfın daha güçlü metotlarını kullanabilme olanağı doğar. Alıştırmalar: 3

ByteArrayInputStream Sınıfı java.lang.object java.io.inputstream java.io.bytearrayinputstream Kılgıladığı Arayüzler: Closeable, AutoCloseable Bildirimi: public class ByteArrayInputStream extends InputStream Bir akımdan okunan byte ların konulacağı bir buffer a (verikabı) sahiptir. read() metodunun okuyacağı byte ın sırasını belirleyen bir sayacı vardır. Bir ByteArrayInputStream akımını close() metodu ile kapatmanın etkisi yoktur; yani akım kapatılsa bile read() metodu hata atmadan çalışır. Örnek: import java.io.*; import java.io.bytearrayinputstream; public static void main(string[] args) { String str = "Bu bir ByteArrayInputStream örneğidir."; // String sınıfının getbytes() metodu metinden byte okur byte[] bytearray = str.getbytes(); // ByteArrayInputStream nesnesi yarat ByteArrayInputStream bais = new ByteArrayInputStream(byteArray); int ch; // read() metodu ile ByteArrayInputStream akımından byte oku while ((ch = bais.read())!= -1) { System.out.print((char) ch); Açıklamalar: 11. satırdaki byte[] getbytes() 4

metodu, String sınıfına aittir. str stringini byte dizisine dönüştürür (encoding). Bunu yaparken platformun öntanımlı charset ini (alfabe) kullanır. Elde ettiği dizi ile bytearray adlı yeni bir byte array yaratmış olur. SequenceInputStream Sınıfı java.lang.object java.io.inputstream java.io.sequenceinputstream Kılgıladığı Arayüzler: Closeable, AutoCloseable Bildirimi: public class SequenceInputStream extends InputStream Kurucuları: SequenceInputStream(Enumeration<? extends InputStream> e) Đkiden çok akımı uc uca ekleyip yeni bir SequenceInputStream akımı yaratır. Uc uca eklenen akımlar Enumeration tip olmalıdır. SequenceInputStream(InputStream s1, InputStream s2) Önce s1 akımını sonra s2 akımını okuyarak, ikisinden oluşan yeni bir SequenceInputStream akımı yaratır. Bir SequenceInputStream akımı başka akımların sırayla uc-uca eklenerek okunmasını sağlar. Önce ilk akımdan başlar, onun sonuna gelinince ikinci akımdan veri alır; o bitince üçüncü akımdan veri alır, böylece son akım bitene kadar süreç devam eder. Örnek: Bu örnek SequenceInputStream(InputStream s1, InputStream s2) kurucusunu kullanarak bir SequenceInputStream akımı yaratır. import java.io.*; public static void main(string args[]) throws Exception { String str1 = "Ankara"; String str2 = "Đstanbul"; byte[] b1 = str1.getbytes(); 5

/** */ byte[] b2 = str2.getbytes(); byte[] buf = new byte[50]; ByteArrayInputStream inputstream1 = new ByteArrayInputStream(b1); ByteArrayInputStream inputstream2 = new ByteArrayInputStream(b2); SequenceInputStream seqis = new SequenceInputStream(inputStream1, inputstream2); int okunanbyte; while ((okunanbyte = seqis.read(buf))!= -1) { System.out.print(new String(buf, 0, okunanbyte)); seqis.close(); AnkaraĐstanbul Örnek: Bu örnek SequenceInputStream(Enumeration<? extends InputStream> e) kurucusunu kullanarak bir SequenceInputStream akımı yaratır. import java.io.fileinputstream; import java.io.inputstream; import java.io.sequenceinputstream; import java.util.enumeration; import java.util.vector; public static void main(string[] args) throws Exception { FileInputStream fis1 = new FileInputStream("dosya1.txt"); FileInputStream fis2 = new FileInputStream("dosya2.txt"); FileInputStream fis3 = new FileInputStream("dosya3.txt"); Vector<InputStream> inputstreams = new Vector<InputStream>(); inputstreams.add(fis1); inputstreams.add(fis2); inputstreams.add(fis3); Enumeration<InputStream> enu = inputstreams.elements(); SequenceInputStream sis = new SequenceInputStream(enu); int birbyte; while ((birbyte = sis.read())!= -1) { System.out.write(birByte); System.out.flush(); 6

Açıklamalar: Bu program, sırasıyla dosya1, dosya2 ve dosya3 ü okumak için üç tane FileInputStream nesnesi yaratıyor. Sonra bunları bir vektor e ekliyor. Vektörün öğelerini numaralıyor. Numaralanan öğeleri SequenceInputStream akımına akımına koyuyor. En sonunda, bunları bir döngü ile okuyup ekrana yazdırıyor. Örnek: Bu örnek SequenceInputStream(InputStream s1, InputStream s2) kurucusunu kullanarak bir SequenceInputStream akımı yaratır. import java.io.*; public static void main(string argv[]) { String str1 = "Kanun koymak, değiştirmek ve kaldırmak ile \n" + "Savaş ilânına karar vermek yasama erkinin önemli iki görevidir. \n"; String str2 = "Yargı yürütmeyi denetleyen ve vatandaşların yasal haklarını \n" + "kanun önünde koruması için çalışan erktir. \n"; byte[] buf = new byte[10]; System.out.println("TEST: Okuma"); try { ByteArrayInputStream is1 = new ByteArrayInputStream(str1.getBytes()); ByteArrayInputStream is2 = new ByteArrayInputStream(str2.getBytes()); SequenceInputStream sis = new SequenceInputStream(is1, is2); int okunanbyte; while ((okunanbyte = sis.read(buf))!= -1) { System.out.print(new String(buf, 0, okunanbyte)); sis.close(); System.out.println("BAŞARILI: Okuma"); catch (IOException e) { System.out.println("BAŞARISIZ: Okuma: " + e); /** TEST: Okuma Kanun koymak, değiştirmek ve kaldırmak ile Savaş ilânına karar vermek yasama erkinin önemli iki görevidir. Yargı yürütmeyi denetleyen ve vatandaşların yasal haklarını 7

kanun önünde koruması için çalışan erktir. BAŞARILI: Okuma */ StringBufferInputStream (Deprecated) Bu sınıf ve metotları Java 1.6 sürümünde iskartaya çıkarılmıştır (deprecated). Bunun yerine StringReader sınıfının kullanılması önerilmektedir. import java.io.*; public static void main(string[] args) throws Exception { StringBufferInputStream obj = new StringBufferInputStream("Ankara"); System.out.println("First character of the buffer : " + (char) obj.read()); System.out.println("Next character of the buffer : " + (char) obj.read()); System.out.println("Next character of the buffer : " + (char) obj.read()); obj.reset(); System.out okunan karekter : ".println("üç karekter okunduktan sonra reset() yapılırsa, + (char) obj.read()); /** First character of the buffer : A Next character of the buffer : n Next character of the buffer : k Üç karekter okunduktan sonra reset() yapılırsa, okunan karekter : A */ PipedInputStream Sınıfı java.lang.object java.io.inputstream java.io.pipedinputstream Kılgıladığı Arayüzler: 8

Closeable, AutoCloseable Bildirimi: public class PipedInputStream extends InputStream Bir thread ile buffer a veri girişi başka bir thred ile buffer dan veri çıkışı yapar. Bir su deposunun bir vanasından su girişi, başka bir vanasından sı çıkışı olmasına benzetilebilir. import java.io.*; public static void main(string args[]) throws Exception { byte[] b = {10, 20, 30, 40, 50; PipedOutputStream postream = new PipedOutputStream(); PipedInputStream pistream = new PipedInputStream(); //girişçıkışa bağlanıyor pistream.connect(postream); //array'in bileşenleri yazdırılıyor postream.write(b, 0, 5); //PipedInputStream akımı okunuyor ve ekrana yazdırılıyor for (int i = 0; i < b.length; i++) { System.out.println(piStream.read()); // giriş akımı kapatılıyor postream.close(); /** 10 20 30 40 50 */ // çıkış akımı kapatılıyor pistream.close(); FilterInputStream Sınıfı Ayrı bölümde ele alınmıştır. Đlgili bölüme bakınız. 9

FileInputStream Sınıfı Ayrı bölümde ele alınmıştır. Đlgili bölüme bakınız. AudioInputStream Sınıfı Ayrı bölümde ele alınmıştır. Đlgili bölüme bakınız. 10