You are on page 1of 20

Yeni G/ (new I/O)

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 10

YEN G/ (NEW I/O)

Yeni G/ (nio) paketi ierisindeki snflar kullanarak dosya ilemleri (okuma/yazma) ve a zerinden okuma/yazma ilemleri gerekletirebilir. Buradaki fark, dosya ilemlerinin her zaman engellemeli (blocking) ama a ilemlerinin ise opsiyonel olmasdr. Yani a ilemleri istee bal olarak engellemeli ve engellemesiz (non-blocking) olabilir.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 10

Tamponlar (Buffers)

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 10

ByteBuffer Snf

Tamponun kapasitesi : Kapasite parametresinin deeri bir kere ve en bata belirtilir ve bir daha deitirilemez. Bu parametre, tamponun ka adet eleman alacan belirler. Tamponun limiti : Tampon ierisindeki okunamayacak veya yazlamayacak olan elemann indeksini belirtir. Limit, negatif veya tamponun kapasitesinden byk olamaz. Tamponun pozisyonu : Tampon ierisindeki okunabilecek veya yazlabilecek olan elemann indeksini belirtir. Pozisyon, negatif veya limit deerinden byk olamaz.
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 10

NIOTestBir.java
4

Yeni oluturulan ByteBuffer nesnesi

Kapasite = 10 Limit = 10 Pozisyon =10

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 10

ersine veri atlm ByteBuffer nesnesi

Kapasite = 10 Limit = 10 Pozisyon =7

Pozisyon deerinin 7 olmasndaki sebep, okunabilecek ve yazlabilecek olan hcrenin indeksinin 7 olmasndan kaynaklanr.

NIOTestIki.java
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 10 6

hasRemaining(), flip(), get() Yordamlar

hasRemaining() yordam, mevcut pozisyon ile limit arasndaki eleman saysn bildirir. flip() yordam arldnda, ByteBuffer nesnesinde tanml olan pozisyonun deeri sfra eitlenir. Limit deeri okunamayacak veya yazlamayacak olan son elemann zerine getirilir ve biraz ileride greceimiz mark() yordamnn kullanlmasyla iaretlenmi olan yer silinir. get() yordam, belirtilen eleman okur.

NIOTestUc.java
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 10 7

ByteBuffer nesnesinin, flip() yordam arldktan sonraki hali

Limit deeri neden 7 oldu?

Daha dorusu limit diye bir deer niye var?


Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 10 8

Relatif ve Mutlak Operasyonlar (Relative and absolute operations)

Verileri ieri yerletirme veya ierideki verileri ekme ilemleri Buffer soyut snfndan tremi her alt snf iin 2 kategori bulunur.
Relatif Operasyonlar Mutlak Operasyonlar

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 10

Relatif Operasyonlar

Relatif operasyon kullanlarak ieri atlan her veri iin mevcut pozisyon deeri bir artar. Atlan verileri ekmek iin kullanlan get() yordamn armadan evvel, pozisyon deerinin sfrlanacan dnrsek (flip() yordamn kullanarak), ieriden ekilen her eleman iin pozisyonun deeri bir artacaktr. put() yordamn kullanrken limit am oluursa BufferOverflowException istisnas oluur. get() yordamn kullanrken bir limit am oluursa da BufferUnderflowException istisnas oluur.

RelatifOrnek.java
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 10 10

Mutlak Operasyonlar

Mutlak operasyon kullanlarak ieri atlan verilerde veya mevcut verileri eki ilemlerinde belirli bir indeks numaras kullanlr. Mutlak operasyonlarda mevcut pozisyonun deerinde bir art olmaz.

MutlakOrnek.java
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 10 11

Sarmalama

lkel tipte olan bir dizi, java.nio paketi ierisindeki tampon snflarn kullanarak sarmalanabilir. Bu ilem iin wrap() yordamn kullanmamz yeterli olacaktr.

Sarmaliyici.java
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 10 12

Dorusal ve Dorusal Olmayan Tamponlar (Direct and non-direct buffers)

Dorusal ve dorusal olmayan tamponlar sadece ByteBuffer snfna ait olan zelliklerdir.
Dorusal ByteBuffer nesnesi oluturmak iin allocateDirect() yordamn armak yeterlidir. Dorusal olmayan ByteBuffer nesnesi oluturmak iin allocate() yordamn armak yeterlidir.

DogrusalOrnekBir.java DogrusalOlmayanOrnekBir.java
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 10 13

ByteOrder Snf

Bir verinin tipi sekizli (byte) tipinden bykse, bu verinin blnp sekizli tipindeki verilere dntrlerek saklanmas gerekir. rnein ilkel int tipindeki bir veri, 4 sekizlik (32 bit) verilere blnerek saklanr veya ilkel short tipindeki bir veri 2 sekizlik (16 bit) verilere dntrlerek saklanr. Verilerin bu saklanma ilemi CPU mimarilerinin gemiten gelen farkllklarndan dolay deiiklik gsterebilir.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 10

14

evirim

Bir tipteki tampon nesnesini baka bir tipteki tampon nesnesine evirebiliriz. rnein ByteBuffer nesnesini, DoubleBuffer nesnesine kolaylkla evirebiliriz. CeviriciOrnek.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 10

15

Tampon Nesneler ve Diziler

Tampon nesnelerin, arka planda bildiimiz dizileri kullanmas iin dorusal olmayan (nondirect) bir ekilde oluturulmu olmalar gerekir.

DiziOrnek.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 10

16

aretleme lemleri

java.nio paketinin altndaki tampon snflarn kullanarak yaplan iaretleme ve iaretlenen yere geri dnme ilemleri gayet kolaydr.

IsaretlemeOrnek.java

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 10

17

Kanallar

Kanal zelliini kullanarak, uygun bir cihaz, bir dosya, a zerinden bir soket veya uygun bir uygulama ile balant kurabilirler. Java programlama diline versiyon 1.4'de katlm olan bu zellik, geen blmde incelediimiz InputStream ve OutputStream soyut snflarnn (bunlardan tremi olan alt snflarn) saladklar zelliklerin pabularn biraz da olsa dama atmaktadr. Bu blmmzde sadece FileChannel snfn inceleyeceiz.

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 10

18

FileChannel Snf

Bu snf sayesinde mevcut fiziksel bir dosya ile balant kurup okuma, yazma, eleme (mapping) ve dosya ynetim ilemlerini gerekletirebiliriz.

ChannelOrnekBir.java
Altu B. Altnta 2003 Java ve Yazlm Tasarm - Blm 10 19

Sorular ...

Altu B. Altnta 2003

Java ve Yazlm Tasarm - Blm 10

20

You might also like