Java ObjectInputStream

Java Objectinputstream



“Informācijai, kas rakstīta, izmantojot ObjectOutputStream objektu, galvenokārt var piekļūt, izmantojot ObjectInputStream klasi. ObjectInputStream klases galvenais mērķis būtu rekonstruēt pamatdatus un entītijas, kas tiek iegūtas, izmantojot ObjectOutputStream klasi. Izmantojot SocketStream, ObjectInputStream var izmantot arī objektu pārsūtīšanai starp dažādiem resursdatoriem. Tāpēc mēs esam nolēmuši uzrakstīt noderīgu rokasgrāmatu mūsu Ubuntu 20.04 sistēmai, lai atdalītu objectinputstream klases objektu, lai nolasītu datus no faila ievades straumes. Sāksim ar konsoles atvēršanu.

Piemērs 01

Sākot ar mūsu raksta pirmo piemēru, mēs esam izveidojuši jaunu Java failu “test.java”. Pēc tam tajā pašā mapē mēs ģenerējām arī teksta failu.







Lai lasītu ievades straumes objektus Java programmā, mums ir jāimportē izvades straume. Tātad sākumā mēs importējām pakotnes “java.io.ObjectInputStream” un “java.io.ObjectOutputStream”. Līdztekus tam, lai ievietotu datus failā, mums ir jāimportē “java.io.FileInputStream” un “java.io.FileInputStream”. Mēs esam izveidojuši klasi “Main”, kurā ir viena galvenā () funkcija.



Funkcijas izpilde sākas no vesela skaitļa mainīgā “d” deklarācijas. Lai izvairītos no pēkšņas programmas iziešanas kļūdu dēļ, mēs pievienojām Java try-catch paziņojumu. Daļa “izmēģināt” sākas ar faila izvades straumes objekta “f” inicializāciju, izmantojot FileOutputStream klasi. Mēs esam nodevuši faila nosaukumu “new.txt” šim objektam “f”. Mēs esam izveidojuši objektu izvades straumi “o” un nodevuši faila objektu “f” klasei ObjectOutputStream, lai padarītu failu par izvades straumi.



Jau nākamajā rindā mēs esam izsaukuši Java izvades straumes funkciju writeInt (), izmantojot izvades straumes objektu “o”, lai nodotu tai vesela skaitļa mainīgo “d”, t.i., saglabātu to failā. 12. rindiņā esam izveidojuši faila ievades straumi “fs”, izmantojot java FileInputStream klasi, nododot tam failu “new.txt”, t.i., tajā jau ir dati. Šis faila ievades straumes objekts “fs” ir nodots jaunģenerētajam ObjectInputStream klases objektam “os”, lai iespējotu lasīšanu no faila straumes. Funkcija println() no java pakotnes “System.out” ir atmesta, lai izsauktu funkciju readInt() caur objekta ievades straumes objektu “os”, lai parādītu datus no faila new.txt. Pēc tam mēs esam aizvēruši izvades straumi un ievades straumi, izmantojot attiecīgos objektus “o” un “os”, izmantojot java failu apstrādes funkciju “aizvērt”. Tas ir nepieciešams, lai aizvērtu straumes, lai neviens cits lietotājs nevarētu ievadīt vai izvadīt datus no faila. Paziņojumā catch() mēs esam izmantojuši funkciju getStackTrace(), lai iegūtu kļūdu un parādītu to ekrānā, izmantojot izņēmuma mainīgo “e”. Šī programma ir gatava izpildei čaulā.





Mēs tikko saglabājām savu java koda failu pirms tā izpildes un izmantojām java atslēgvārda instrukciju, lai izpildītu failu “test.java”. Tas neko neatdod pretī. Arī teksta faila “new.txt” datu parādīšana čaulā, izmantojot instrukciju “cat”, tika parādīta atkritumu vērtība. Tas ir tāpēc, ka lielāko daļu laika java izpildītājs nevar nolasīt veselā skaitļa vērtību no faila. Bet, visticamāk, tas parādīs precīzu vesela skaitļa vērtību.



Pārbaudot failu new.txt, to manuāli atverot, mēs redzējām, ka failā ir parādīts vērtības unikoda formāts.

Ja nevarat parādīt vesela skaitļa vērtību no faila straumes, varat izmantot java programmas funkciju writeObject() funkcijas writeInt() vietā, lai ierakstītu vērtību “d” faila straumē, izmantojot objektu “o”. kā parādīts. Līdztekus tam ir jāatmet funkcija “readObject()”, nevis funkcija readInt(), lai parādītu datus no faila ievades straumes.

Atjauninot šo kodu, izpildes laikā tiktu parādīta vesela skaitļa vērtība.

Piemērs 02

Ņemsim vērā vēl vienu java programmēšanas vērtību, lai izslēgtu objekta ievades straumi virknes tipa vērtībai. Tādējādi mēs esam sākuši šo koda piemēru, importējot tās pašas java klases FileInputStream, FileOutputStream, ObjectInputStream un ObjectOutputStream no java bibliotēkas pakotnes “io”. Galvenajai klasei ir sava main() funkcija, lai sāktu izpildīt šo kodu. Virknes mainīgais “d2” tiek inicializēts ar garu virknes vērtību.

Tas pats try-catch paziņojums ir noņemts, lai izvairītos no kļūdām un netraucētu šī Java koda izpildi. Objekts “f” faila izvades straumei ir izveidots, izmantojot FileOutputStream klasi, izmantojot “new.txt” kā argumentu. Faila izvades straumes objekts “f” ir nodots izvades straumes objektam “o”, kas izveidots, izmantojot ObjectOutputStream klasi. Tagad izvades straume “o” izsauc funkciju writeObject(), nododot tai virknes mainīgo “d”, kas jāieraksta failā “new.txt”.

Pēc tam izveidoja faila ievades straumi “fs”, izmantojot klasi FileInputStream, nododot tai faila nosaukumu “new.txt”, t.i., lai nolasītu datus no tā. Tagad ObjectInputStream klases objekts “os” izmantotu faila ievades straumes objektu “fs”, lai nolasītu datus, izmantojot java funkciju readObject() klases “System.out” izpildes priekšrakstā “println”. Pēc tam mēs mēdzam aizvērt ievades un izvades straumes, izsaucot funkciju “aizvērt”, un uztveršanas paziņojums tiek izmantots, lai iegūtu visus izņēmumus, kas notikuši izmēģinājuma daļā, un izvairītos no pēkšņas šīs programmas izpildes aizvēršanas.

Šī Java koda faila un teksta faila izpilde konsolē parādīja virknes vērtību.

Secinājums

ObjectInputStream klases izmantošana ir vienīgā pieejamā metode tādu vielu nolasīšanai, kuras izmanto protokolu Serializable vai Externalizable. Rezumējot, mēs esam iekļāvuši visu nepieciešamo informāciju, lai izmantotu java objectinputstream klasi, lai nolasītu datus no faila objekta ievades straumes. Šim nolūkam mēs šeit esam izlaiduši divus dažādus Java koda piemērus. Pirmajā piemērā tiek izmantota vesela skaitļa tipa ievades mainīgā vērtība, savukārt otrajā ilustrācijā ir parādīta virknes mainīgā vērtība, t.i., nolasīšana no ievades faila straumes.