Professional Documents
Culture Documents
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.
Tamponlar (Buffers)
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
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() 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
Verileri ieri yerletirme veya ierideki verileri ekme ilemleri Buffer soyut snfndan tremi her alt snf iin 2 kategori bulunur.
Relatif Operasyonlar Mutlak Operasyonlar
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 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.
14
evirim
Bir tipteki tampon nesnesini baka bir tipteki tampon nesnesine evirebiliriz. rnein ByteBuffer nesnesini, DoubleBuffer nesnesine kolaylkla evirebiliriz. CeviriciOrnek.java
15
Tampon nesnelerin, arka planda bildiimiz dizileri kullanmas iin dorusal olmayan (nondirect) bir ekilde oluturulmu olmalar gerekir.
DiziOrnek.java
16
aretleme lemleri
java.nio paketinin altndaki tampon snflarn kullanarak yaplan iaretleme ve iaretlenen yere geri dnme ilemleri gayet kolaydr.
IsaretlemeOrnek.java
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.
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 ...
20