Java ObjectInputStream

Java Objectinputstream



“Bir ObjectOutputStream nesnesi aracılığıyla yazılan bilgilere öncelikle ObjectInputStream sınıfı kullanılarak erişilir. ObjectInputStream sınıfının temel amacı, ObjectOutputStream sınıfı kullanılarak üretilen temel verileri ve varlıkları yeniden yapılandırmak olacaktır. Bir SocketStream kullanılarak, ObjectInputStream, nesneleri farklı ana bilgisayarlar arasında aktarmak için de kullanılabilir. Bu nedenle, dosya giriş akışından veri okumak için objectinputstream sınıf nesnesini çıkarmak için Ubuntu 20.04 sistemimiz için yararlı bir kılavuz yazmaya karar verdik. Bir konsolun açılmasıyla başlayalım.”

Örnek 01

Yazımızın ilk örneğinden başlayarak yeni bir java dosyası “test.java” oluşturuyoruz. Bundan sonra aynı klasörde bir metin dosyası da oluşturduk.







Bir java programında giriş akışının nesnelerini okumak için çıkış akışını içe aktarmamız gerekir. Bu yüzden başlangıçta “java.io.ObjectInputStream” ve “java.io.ObjectOutputStream” paketlerini içe aktarıyoruz. Bununla birlikte, verileri bir dosyaya eklemek için “java.io.FileInputStream” ve “java.io.FileInputStream” dosyalarını içe aktarmamız gerekiyor. Tek bir main() fonksiyonu tutan bir “Main” sınıfı yarattık.



İşlev yürütme, bir 'd' tamsayı değişkeninin bildiriminden başlar. Hatalardan dolayı programın aniden çıkışını önlemek için Java'nın try-catch ifadesini ekledik. 'Dene' bölümü, FileOutputStream sınıfı aracılığıyla bir dosya çıkış akışı nesnesi 'f'nin başlatılmasıyla başlar. Bu “f” nesnesine “new.txt” dosya adını geçtik. Bir Object Output Stream “o” yarattık ve bir dosyayı bir çıktı akımı yapmak için “f” dosya nesnesini ObjectOutputStream sınıfına ilettik.



Bir sonraki satırda, bir tamsayı değişkeni “d” iletmek, yani onu bir dosyaya kaydetmek için “o” çıktı akışı nesnesi aracılığıyla Java çıkış akışının writeInt() işlevini çağırıyoruz. 12. satırda, Java'nın FileInputStream sınıfını kullanarak bir 'new.txt' dosyası ileterek 'fs' dosya giriş akışını oluşturduk, yani içinde zaten veri var. Bu dosya giriş akışı nesnesi 'fs', dosya akışından okumayı etkinleştirmek için ObjectInputStream sınıfının yeni oluşturulan 'os' nesnesine iletildi. Java'nın “System.out” paketindeki println() işlevi, new.txt dosyasındaki verileri görüntülemek için nesne giriş akışı nesnesi “os” aracılığıyla readInt() işlevini çağırmak için castoff olmuştur. Bundan sonra, Java'da dosya işlemenin 'kapat' işlevini kullanarak ilgili nesneleri 'o' ve 'os' kullanarak çıkış akışını ve giriş akışını kapatıyoruz. Bu, akışları kapatmak için gerekli bir adımdır, böylece başka hiçbir kullanıcı bir dosyadan veri girişi veya çıkışı yapamaz. catch() deyimi içinde, bir hata almak ve bunu “e” İstisna değişkeni aracılığıyla ekranda görüntülemek için getStackTrace() işlevini kullanıyoruz. Bu program kabuk üzerinde yürütülmeye hazırdır.





Java kod dosyamızı çalıştırmadan önce kaydetmiştik ve “test.java” dosyasını çalıştırmak için java anahtar kelime talimatını kullandık. Karşılığında hiçbir şey döndürmez. Ayrıca, 'cat' komutu kullanılarak kabuk üzerinde 'new.txt' metin dosyasının verilerinin görüntülenmesi, bir çöp değeri gösterdi. Bunun nedeni, çoğu zaman Java yürütücüsünün dosyadan tamsayı değerini okuyamamasıdır. Ancak büyük olasılıkla, tam tamsayı değerini gösterecektir.



new.txt dosyasını elle açarak kontrol ettiğimizde, dosyada değerin bir Unicode formatının gösterildiğini gördük.

Dosya akışından tamsayı değerini görüntüleyemiyorsanız, “o” nesnesi aracılığıyla dosya akışına “d” değerini yazmak için writeInt() işlevi yerine java programında writeObject() işlevini kullanabilirsiniz. gösterildiği gibi. Bununla birlikte, dosya giriş akışındaki verileri görüntülemek için readInt() işlevi yerine 'readObject()' işlevini kapatmanız gerekir.

Bu kodu güncellemek, yürütme sırasında tamsayı değerini görüntüler.

Örnek 02

Dize türü değeri için nesne giriş akışını devre dışı bırakmak için başka bir Java programlama değerine sahip olalım. Böylece bu örnek kodu, Java kütüphanesinin “io” paketinden Java'nın aynı FileInputStream, FileOutputStream, ObjectInputStream ve ObjectOutputStream sınıflarını içe aktararak başlattık. Main sınıfı, bu kodu çalıştırmaya başlamak için main() işlevine sahiptir. Bir dize değişkeni 'd2', uzun bir dize değeriyle başlatılır.

Aynı try-catch ifadesi, hatayı önlemek ve bu java kodunun sorunsuz yürütülmesi için iptal edilmiştir. Dosya çıktı akışı için 'f' nesnesi, argüman olarak 'new.txt' alınarak FileOutputStream sınıfı aracılığıyla oluşturulmuştur. Dosya çıktı akışı nesnesi 'f', ObjectOutputStream sınıfı kullanılarak oluşturulan çıktı akışı nesnesine 'o' geçirildi. Şimdi, çıktı akışı 'o', 'new.txt' dosyasına yazılacak bir dize değişkeni 'd' ileterek writeObject() işlevini çağırıyor.

Ardından, 'new.txt' dosya adını ileterek FileInputStream sınıfını kullanarak bir dosya giriş akışı 'fs' oluşturdu, yani verileri ondan okumak için. Şimdi, ObjectInputStream sınıf nesnesi 'os', 'System.out' sınıfının 'println' yürütme deyiminde Java'nın readObject() işlevini kullanarak verileri okumak için 'fs' dosya giriş akışı nesnesini kullanıyor olacaktır. Ardından, “kapat” işlevini çağırarak giriş ve çıkış akışlarını kapatma eğilimindeyiz ve catch deyimi, try bölümünde meydana gelen istisnaları almak ve bu programın çalışmasının aniden kapanmasını önlemek için kullanılır.

Bu java kod dosyasının ve metin dosyasının yürütülmesi, konsolda dize değerini gösterdi.

Çözüm

ObjectInputStream sınıfının kullanımı, Serileştirilebilir veya Haricileştirilebilir protokolünü kullanan maddeleri okumak için kullanılabilen tek yöntemdir. Özetlemek gerekirse, dosya nesnesi giriş akışından veri okumak için Java'nın objectinputstream sınıfını kullanmak için gerekli tüm ayrıntıları ekledik. Bunun için burada iki farklı java kodu örneği yayınlıyoruz. İlk örnek tamsayı tipi girdi değişkeni değerini kullanır, ikinci örnek ise dizgi değişkeni değerini çıkarır, yani girdi dosyası akışından okunur.