1. OutputStream
sınıf
Yakın zamanda giriş akışlarını araştırdık. Çıkış akışları hakkında konuşmanın zamanı geldi.
Sınıf OutputStream
, bayt çıktısını destekleyen tüm sınıflar için üst sınıftır. Bu, kendi başına hiçbir şey yapmayan soyut bir sınıftır, ancak her durum için alt sınıfları vardır.
Kulağa son derece karmaşık geliyor. Daha basit bir şekilde ifade etmek gerekirse, bu sınıf, örneğin karakterler veya diğer veri türleri üzerinde değil, baytlar üzerinde çalışır. Ve soyut olduğu gerçeği, genellikle onu kullanmadığımız, onun soyundan gelen sınıflardan birini kullandığımız anlamına gelir. Örneğin FileOutputStream
ve benzerleri.
Ama sınıfa geri dönelim OutputStream
. Bu sınıf, tüm alt sınıflarının uygulaması gereken yöntemlere sahiptir. İşte ana olanlar:
Yöntemler | Tanım |
---|---|
|
int Akışa bir bayt ( değil) yazar . |
|
Akışa bir dizi bayt yazar |
|
Bir bayt dizisinin bir kısmını akışa yazar |
|
Tamponda depolanan tüm verileri akışa yazar |
|
Akışı kapatır |
Miras alan bir sınıftan bir nesne oluşturduğunuzda InputStream
, genellikle verilerin okunacağı bir kaynak nesne belirtirsiniz InputStream
. Miras alan bir sınıftan bir nesne oluşturduğunuzda OutputStream
, genellikle verilerin yazılacağı hedef nesneyi veya akışı da belirtirsiniz.
Sınıfın tüm metotlarını kısaca gözden geçirelim OutputStream
:
write(int b)
yöntem
int
Bu yöntem , çıktı akışına bir bayt (bir değil) yazar . Geçirilen değer bir bayta dönüştürülür ve int'nin ilk üç baytı atılır.
write(byte[] buffer)
yöntem
Verilen bayt dizisini çıkış akışına yazar. Bu kadar.
write(byte[] buffer, int offset, int length)
yöntem
Geçirilen bayt dizisinin bir bölümünü çıkış akışına yazar. Ofset değişkeni, dizinin ilk elemanının indeksini gösterir ve length
yazılacak altkümenin uzunluğudur.
flush()
yöntem
Yöntem flush()
, geçerli akışta potansiyel olarak tamponlanmış herhangi bir veriyi hedef akışa yazılmaya zorlamak için kullanılır. Bu, ara belleğe alma ve/veya zincir halinde düzenlenmiş çoklu akış nesneleri kullanıldığında geçerlidir.
close()
yöntem
Yazılmamış verileri hedef nesneye yazar. close()
Bir blok kullanırsanız yöntemin çağrılması gerekmez try-with-resources
.
Dosya kopyalama örneği
kod | Not |
---|---|
|
InputStream bir dosyadan okumak için OutputStream bir dosyaya yazmak için İçine verileri okuyacağımız arabellek Akışta veri olduğu sürece verileri arabelleğe oku Verileri arabellekten ikinci akışa yaz |
2. Writer
sınıf
Sınıf Writer
, sınıfla tamamen aynıdır OutputStream
, ancak yine bir fark vardır: char
bayt yerine karakterlerle ( ) çalışır.
Bu soyut bir sınıftır: sınıfın nesnelerini oluşturamazsınız Writer
. Ana hedefi, yüzlerce alt sınıf için ortak bir üst sınıf olmak ve onlara karakter akışlarıyla çalışmak için ortak yöntemler vermektir.
Sınıfın yöntemleri Writer
(ve onun soyundan gelen tüm sınıflar):
Yöntemler | Tanım |
---|---|
|
int Akışa bir karakter (bir değil) yazar . |
|
Akışa bir dizi karakter yazar |
|
Bir karakter dizisinin bir kısmını akışa yazar |
|
Akışa bir dize yazar |
|
Dizinin bir bölümünü akışa yazar |
|
Tamponda depolanan tüm verileri akışa yazar |
|
Akışı kapatır |
Yöntemler, sınıfın yöntemlerine çok benzer OutputStream
, ancak bayt yerine karakterlerle çalışırlar.
Yöntemlerin açıklaması:
write(int b)
yöntem
Bu yöntem, çıktı akışına tek bir karakter ( char
— değil ) yazar. int
Geçirilen değer a'ya dönüştürülür char
ve ilk iki bayt atılır.
write(char[] buffer)
yöntem
Verilen karakter dizisini çıkış akışına yazar.
write(char[] buffer, int offset, int length)
yöntem
Geçirilen karakter dizisinin bir bölümünü çıkış akışına yazar. Değişken offset
, dizinin ilk elemanının indeksini gösterir ve length
yazılacak altkümenin uzunluğudur.
write(String str)
yöntem
Verilen dizeyi çıkış akışına yazar.
write(String str, int offset, int length)
yöntem
Verilen dizgenin bir bölümünü çıkış akımına yazar: dizge bir karakter dizisine dönüştürülür. Değişken offset
, dizinin ilk elemanının indeksini gösterir ve length
yazılacak altkümenin uzunluğudur.
flush()
yöntem
Yöntem flush()
, geçerli akışta potansiyel olarak tamponlanmış herhangi bir veriyi hedef akışa yazılmaya zorlamak için kullanılır. Bu, ara belleğe alma ve/veya zincir halinde düzenlenmiş çoklu akış nesneleri kullanıldığında geçerlidir.
close()
yöntem
Yazılmamış verileri hedef nesneye yazar. close()
Bir blok kullanırsanız yöntemin çağrılması gerekmez try-with-resources
.
Bir metin dosyasını kopyalayan bir program örneği:
kod | Not |
---|---|
|
Reader bir dosyadan okumak Writer için bir dosyaya yazmak için İçine verileri okuyacağımız arabellek Akışta veri olduğu sürece verileri bir arabelleğe oku Verileri arabellekten ikinci akışa yaz |
StringWriter
sınıf
Sınıfı devralan başka bir ilginç sınıf daha var Writer
: adı StringWriter
. Değişken bir dize içerir - bir StringBuffer
nesne. Ve nesneye bir şey "yazdığınız" her seferde StringWriter
, metin yalnızca dahili arabelleğine eklenir.
Örnek:
kod | Not |
---|---|
|
Bir hedef karakter akışı ( StringWriter ) oluşturulur. Bir dize, içindeki arabelleğe yazılır. StringWriter Bir dize, içindeki arabelleğe yazılır. StringWriter Bir nesnenin içeriğini bir dizeye dönüştürme |
Bu durumda, StringWriter
sınıf aslında sınıfın üzerinde bir sarmalayıcıdır StringBuffer
, ancak StringWriter
sınıf, akış sınıfının soyundan gelir Writer
ve akış nesnelerinin zincirlerinde kullanılabilir. Bu pratikte oldukça kullanışlı bir özelliktir.
3. PrintStream
sınıf
Çıkış akışı sınıfları, kendilerine iletilen hedef akışa veri yazan aracı akışlarla bir zincire de yerleştirilebilir. Bu akışların etkileşiminin genel görünümü şöyle görünür:
Tüm ara çıktı akışlarının en ilginç ve çok yönlü olanı PrintStream
. Onlarca metodu ve 12 adede kadar yapıcısı vardır.
Sınıf , . PrintStream
_ Bu, sınıfın kendi yöntemlerine ek olarak üst sınıfların tüm yöntemlerine sahip olduğu anlamına gelir . İşte en ilginç olanlar:FilterOutputStream
OutputStream
PrintStream
Yöntemler | Tanım |
---|---|
|
Geçirilen nesneyi bir dizgeye dönüştürür ve onu hedef akışa verir. |
|
Geçirilen nesneyi bir dizgeye dönüştürür ve onu hedef akışa verir. Sonuna bir satır sonu ekler |
|
Hedef akışa bir satır sonu karakteri verir |
|
Biçim dizesine ve iletilen bağımsız değişkenlere dayalı olarak bir dize oluşturur ve çıktı verir; String.format() yönteme benzer |
Peki bu onlarca yöntem nerede diye soruyorsunuz?
print()
Pekala, farklı parametrelere sahip ve yöntemlerinin birçok çeşidi vardır println()
. Bu tabloda özetlenebilirler.
Bu yöntemlerin ayrıntılarına girmeyeceğiz çünkü onları zaten iyi biliyorsunuz. Neye vardığımı tahmin edebilir misin?
Hatırladın mı System.out.println()
? Ancak iki satırda yazılabilir:
kod | Konsol çıkışı |
---|---|
|
|
En sevdiğimiz komut, sınıfın statik değişkenindeki yönteme yapılan çağrıdır . Ve bu değişkenin türü .System.out.println()
println()
out
System
PrintStream
PrintStream
Pek çok CodeGym seviyesinde ve hemen hemen her görevde, sınıfın yöntemlerini bilmeden çağırıyorsunuz !
Pratik kullanım
ByteArrayOutputStream
Java , miras alan dinamik olarak büyüyen bir bayt dizisi olan bu ilginç sınıfa sahiptir OutputStream
.
Bir ByteArrayOutputStream
nesne ve PrintStream
nesne şu şekilde zincirlenebilir:
kod | Tanım |
---|---|
|
Bellekte bir yazma tamponu oluşturun Tamponu bir PrintStream nesneye sarın Konsola veri yazın Diziyi bir dizgeye dönüştürün! Konsol çıktısı:
|
GO TO FULL VERSION