Java ObjectInputStream (esimerkkien kanssa)

Tässä opetusohjelmassa opitaan Java ObjectOutputStreamista ja sen menetelmistä esimerkkien avulla.

ObjectInputStreamLuokan java.iopaketti voidaan käyttää lukemaan objekteja, jotka olivat aiemmin kirjoittanut ObjectOutputStream.

Se laajentaa InputStreamabstraktia luokkaa.

Ennen kuin opit ObjectInputStreamluokasta, varmista, että tiedät ObjectOutputStream-luokasta.

ObjectInputStreamin toiminta

Sitä ObjectInputStreamkäytetään pääasiassa ObjectOutputStream.

Pohjimmiltaan ObjectOutputStreammuuntaa Java-objektit vastaaviksi virroiksi. Tätä kutsutaan sarjallisuudeksi. Nämä muunnetut virrat voidaan tallentaa tiedostoihin tai siirtää verkkojen kautta.

Jos nyt meidän on luettava nuo objektit, käytämme sitä ObjectInputStream, joka muuntaa virrat takaisin vastaaviksi objekteiksi. Tätä kutsutaan deserialisaatioksi.

Luo ObjectInputStream

Objektinsyöttövirran luomiseksi meidän on java.io.ObjectInputStreamensin tuotava paketti. Kun tuot paketin, voimme luoda tulovirran seuraavasti.

 // Creates a file input stream linked with the specified file FileInputStream fileStream = new FileInputStream(String file); // Creates an object input stream using the file input stream ObjectInputStream objStream = new ObjectInputStream(fileStream); 

Edellä olevassa esimerkissä olemme luoneet objStream-nimisen objektinsyöttövirran, joka on linkitetty fileStream-nimiseen tiedoston syötevirtaan.

Nyt sitä objStreamvoidaan käyttää objektien lukemiseen tiedostosta.

ObjectInputStream-menetelmät

ObjectInputStreamLuokka antaa toteutuksia eri menetelmien esittää vuoden InputStreamluokassa.

read () Menetelmä

  • read() - lukee tavun tietoja tulovirrasta
  • readBoolean() - lukee tietoja loogisessa muodossa
  • readChar() - lukee tietoja merkkimuodossa
  • readInt() - lukee tietoja kokonaislukuna
  • readObject() - lukee objektin tulovirrasta

Esimerkki 1: Java ObjectInputStream

Katsotaanpa, kuinka voimme käyttää ObjectInputStreamluokkaa luokan kirjoittamien objektien lukemiseen ObjectOutputStream.

 import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; class Main ( public static void main(String() args) ( int data1 = 5; String data2 = "This is programiz"; try ( FileOutputStream file = new FileOutputStream("file.txt"); ObjectOutputStream output = new ObjectOutputStream(file); // Writing to the file using ObjectOutputStream output.writeInt(data1); output.writeObject(data2); FileInputStream fileStream = new FileInputStream("file.txt"); // Creating an object input stream ObjectInputStream objStream = new ObjectInputStream(fileStream); //Using the readInt() method System.out.println("Integer data :" + objStream.readInt()); // Using the readObject() method System.out.println("String data: " + objStream.readObject()); output.close(); objStream.close(); ) catch (Exception e) ( e.getStackTrace(); ) ) ) 

Tuotos

 Kokonaislukutiedot: 5 Merkkijonotiedot: Tämä on ohjelmoitu 

Yllä olevassa esimerkissä olemme käyttäneet readInt()ja readObject()-menetelmää kokonaisluku- ja objektidatan lukemiseksi tiedostosta.

Tässä olemme ObjectOutputStreamkirjoittaneet tietoja tiedostoon. Luemme sitten tiedot tiedostosta ObjectInputStream.

Esimerkki 2: Java ObjectInputStream

Katsotaanpa toinen käytännön esimerkki,

 import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; class Dog implements Serializable ( String name; String breed; public Dog(String name, String breed) ( this.name = name; this.breed = breed; ) ) class Main ( public static void main(String() args) ( // Creates an object of Dog class Dog dog = new Dog("Tyson", "Labrador"); try ( FileOutputStream file = new FileOutputStream("file.txt"); // Creates an ObjectOutputStream ObjectOutputStream output = new ObjectOutputStream(file); // Writes objects to the output stream output.writeObject(dog); FileInputStream fileStream = new FileInputStream("file.txt"); // Creates an ObjectInputStream ObjectInputStream input = new ObjectInputStream(fileStream); // Reads the objects Dog newDog = (Dog) input.readObject(); System.out.println("Dog Name: " + newDog.name); System.out.println("Dog Breed: " + newDog.breed); output.close(); input.close(); ) catch (Exception e) ( e.getStackTrace(); ) ) ) 

Tuotos

 Koiran nimi: Tyson-koirarotu: Labrador 

Yllä olevassa esimerkissä olemme luoneet

  • ObjectOutputStreamnimetty lähtö käyttämällä FileOutputStreamnimettyä tiedostoa
  • ObjectInputStreamnimetty syöttö käyttämällä FileInputStreamnimettyä fileStreamia
  • Koiran luokan koira

Tässä olemme sitten kirjoittaneet objektin tiedostoon objektin ulostulovirralla. Ja objektin syötevirta objektin lukemiseksi tiedostosta.

Huomaa : Koiraluokka toteuttaa Serializablekäyttöliittymän. Se johtuu siitä, että ObjectOutputStreamainoa kirjoittaa sarjoitettavat objektit lähtövirtaan.

Muut ObjectInputStreamin menetelmät

Menetelmät Kuvaukset
available() palauttaa käytettävissä olevan tavujen määrän syöttövirrassa
mark() merkitsee syötevirran sijainnin, johon tiedot on luettu
reset() palauttaa ohjauksen tulovirran pisteeseen, johon merkki asetettiin
skipBytes() ohittaa ja hylkää määritetyt tavut tulovirrasta
close() sulkee kohteen syötevirran

Lisätietoja on Java ObjectInputStream -sivustossa (virallinen Java-dokumentaatio).

Mielenkiintoisia artikkeleita...