seminarski rad objectinputstream
TRANSCRIPT
![Page 1: Seminarski Rad ObjectInputStream](https://reader030.vdocuments.pub/reader030/viewer/2022020222/577c7e651a28abe054a0f8b8/html5/thumbnails/1.jpg)
Veleučilište u RijeciStručni studije poslovne informatike
Seminarski rad
Klasa ObjectInputStream
Student: Goran ČurčićMentor: Ivan PogarčićPredmet: Objektno orijentirane tehnologije I
Rijeka, veljača 2008.
![Page 2: Seminarski Rad ObjectInputStream](https://reader030.vdocuments.pub/reader030/viewer/2022020222/577c7e651a28abe054a0f8b8/html5/thumbnails/2.jpg)
Sadržaj
Sadržaj.....................................................................................................................................2Uvod..........................................................................................................................................3
java.io Class BufferedWriter..................................................................................................3Članovi klase BufferedWriter..........................................................................................4
Polja ( Fields ).........................................................................................................................4Konstruktori ( Constructors )..................................................................................................5
BufferedWriter....................................................................................................................5BufferedWriter....................................................................................................................5
Metode ( Methods ).................................................................................................................5write....................................................................................................................................5write....................................................................................................................................6writer...................................................................................................................................6newLine...............................................................................................................................7flush.....................................................................................................................................7close....................................................................................................................................7
Klasa Writer..........................................................................................................................8java.io Class Writer.................................................................................................................8Polja( Fields )..........................................................................................................................9
lock......................................................................................................................................9Konstruktori ( Constructors )..................................................................................................9
Writer..................................................................................................................................9Writer..................................................................................................................................9
Metode ( Methods ).................................................................................................................9write....................................................................................................................................9write..................................................................................................................................10write..................................................................................................................................10write..................................................................................................................................10write..................................................................................................................................11flush...................................................................................................................................11close..................................................................................................................................11
Primjeri korištenja klase BufferedWriter................................................................12BufferedWriter: close().........................................................................................................12Primjer zapisivanja teksta u file............................................................................................12
![Page 3: Seminarski Rad ObjectInputStream](https://reader030.vdocuments.pub/reader030/viewer/2022020222/577c7e651a28abe054a0f8b8/html5/thumbnails/3.jpg)
Uvod
java.io Class ObjectInputStream
java.lang.Objectjava.io.InputStream
java.io.ObjectInputStream
Klasa ObjectInputStream deserijalizira primitivne podatke i objekte prethodno zapisane koristeći ObjectOutputStream.
ObjectInputStream i ObjectOutputStream mogu ponuditi aplikaciju sa stalnom pohranom ta grafikone objekata kada su korišteni sa klasom FileOutputStream odnosno FileInputStream. ObjectInputStream se koristi kako bi obnovila ove objekte prethodno serijalizirane. Druga korištenja uključuju prijenos objekata između hostova koristeći socket tok ili za raspoređivanje i deraspoređivanje argumenata i parametara u daljinskom komunikacijskom sistemu.
ObjectInputStream osigurava da tipovi svih objekata u grafikonu koji je kreiran od toka odgovaraju klasama prezentiranim u Java Virtual Machine. Klase su učitane kao potrebne koristeći standardan mehanizam.
Samo objekti koji podržavaju java.io.Serializable ili java.io.Externalizable sučelje mogu biti čitane iz toka.
Metoda readObject se koristi za čitanje objekta iz toka. Javin sigurni odljevak trebao bi biti korišten kako bi se dobio željeni tip.
Primitivni tipovi podataka mogu biti čitani iz toka koristeći odgovarajuću metodu u DataInput-u.
Standardni mehanizmi deserijalizacije objekta obnavljaju sadržaj svakog polja u vrijednost i tip koji ima kad je bio zapisan. Polja deklarirana kao privremena ili statična su ignorirana u procesu deserijalizacije. Reference prema drugim objektima uzrokuju da ti objekti budu čitani iz toka kad je potrebno. Grafikoni objekata su točno obnovljena koristeći referentni dijeljeni mehanizam. Novi objekti su uvijek alocirani kada je deserijalizacija, što štiti postojeće objekte da budu prepisani.
Čitanje objekta je analogno kao pokretanje konstruktora za novi objekt. Memorija je alocirana za objekt i inicijalizirana na nulu. No-arg konstruktor je pozvan za ne-serijalizirane klase i
![Page 4: Seminarski Rad ObjectInputStream](https://reader030.vdocuments.pub/reader030/viewer/2022020222/577c7e651a28abe054a0f8b8/html5/thumbnails/4.jpg)
tada polja od serijaliziranih klasa su obnovljena iz toka startajući sa serijaliziranom klasom najbližom do java.lang.object i završno sa najviše specifičnom klasom objekta.
Na primjer za čitanje iz toka koji je zapisan u primjeru ObjectOutputStream:
FileInputStream fis = new FileInputStream("t.tmp");ObjectInputStream ois = new ObjectInputStream(fis);
int i = ois.readInt();String today = (String) ois.readObject();Date date = (Date) ois.readObject();
ois.close();
Klase kontroliraju kako su serijalizirane implementirajući ili java.io.Serializable ili java.io.Externalizable sučelje.
Implementirajući Serializable sučelja dopušta objektu serijalizacije da spremi i obnovi cijelo stanje objekata i dopušta klasama da se razviju između vremena kad je tok zapisan i vremena kad je čitan. Automatski poprečuje reference između objekata, spremajući i obnavljajući cijele grafikone.
Serijalizacijske klase koje zahtijevaju specijalno korištenje dok kroz proces serijalizacije i deserijalizacije trebale bi implementirati sljedeće metode:
private void writeObject(java.io.ObjectOutputStream stream) throws IOException; private void readObject(java.io.ObjectInputStream stream) throws IOException, ClassNotFoundException; private void readObjectNoData() throws ObjectStreamException;
ReadObject metoda je odgovorna za čitanje i obnavljanje stanja objekta za njegovu određenu klasu koristeći podatak zapisan u tok odgovarajućom writeObject metodom. Metoda ne treba voditi brigu da stanjem koje pripada njegovim super-klasama ili podklasama. Stanje je obnovljeno čitajući podatke iz ObjectInputStream-a za individualna polja i stvarajući dodjelu odgovarajućem polju objekta. Čitajući primitivnih tipova podataka je omogućeno sa DataInput-om.
Svaki pokušaj čitanja objekta koji premašuje granice uobičajenog podatka zapisanog sa odgovarajućom writeObject metodom uzrokovat će izbacivanje OptionalData iznimke sa eof poljem vrijednosti istine. Ne-objekti čitaju koji premašuje kraj dodijeljenog podatka odrazit će kraj podatka istim načinom kojim bi naznačili kraj toka: bytewise čitanje će vratiti -1 kao bajt čitanja ili broj bajtova za čitanje, a primitivno čitanje će izbaciti EOF iznimku. Ako nema odgovarajuće writeObject metode, tada kraj standardnog serijaliziranog podatka označava kraj dodijeljenog podatka.
![Page 5: Seminarski Rad ObjectInputStream](https://reader030.vdocuments.pub/reader030/viewer/2022020222/577c7e651a28abe054a0f8b8/html5/thumbnails/5.jpg)
Članovi klase OutputStream
Konstruktori ( Constructors )
ObjectInputStream
public ObjectInputStream (InputStream in )throws IOException
Kreira ObjectInput tok koji čita iz specificiranog Input toka. Zaglavlje serijaliziranog toka je pročitano iz toka i verificirano. Ovaj konstruktor će biti zaustavljen sve dok odgovarajući ObjectOutput tok nije zapisan i dok zaglavlje nije poplavljeno.
Ako je instaliran sigurnosni manager, konstruktor će provjeriti « enableSubclassImplementation » SerializablePermission kada je pozvan direktno ili
![Page 6: Seminarski Rad ObjectInputStream](https://reader030.vdocuments.pub/reader030/viewer/2022020222/577c7e651a28abe054a0f8b8/html5/thumbnails/6.jpg)
indirektno od strane konstruktora podklase koja prelazi preko ObjectInputStream.readFields ili ObjectInputStram.readUnshared metoda.
Parametri: in - ulazni tok iz kojeg se čita
Izuzeci: StreamCorruptedException – ako je zaglavlje toka netočnoIOException - ako se dogodi I/O greška prilikom čitanja zaglavlja tokaSecurityException – ako neprovjerena podklasa ilegalno prelazi sigurnosno osjetljive metodeNullPointerException – ako je in nula
ObjectInputStream
public ObjectInputStream ( )throws IOException,
SecurityException
Omogućuje put podklasama koje su kompletno reimplementirane ObjectInputStream da nemaju alocirani privatni podatak samo korišten od ove implementacije ObjectInputStream-a.
Ako je instaliran sigurnosni manager, metoda prvo poziva metodu checkPermission sigurnosnog managera sa SerializablePermission ( "enableSubclassImplementation" ) dopuštenjem da osigura korištenje podklasa.
Izuzeci: IOException SecurityException – ako postoji sigurnosni manager i ako checkPermission metoda negira omogućavaje podklasa
Metode ( Methods )
readObject
public final Object readObject() throws IOException, ClassNotFoundException
![Page 7: Seminarski Rad ObjectInputStream](https://reader030.vdocuments.pub/reader030/viewer/2022020222/577c7e651a28abe054a0f8b8/html5/thumbnails/7.jpg)
Čita objekt iz ObjectInput toka. Klasa objekta, potpis klase, i vrijednost ne-privremenog i ne-statičnog polja klase i svi njegovi super-tipovi su pročitani. Standardna deserijalizacija klase može biti prijeđena koristeću writeObject i readObject metode. Objekti referencirani od ovog objekt su čitani prijenosno pa je tako kompletno ekvivalentni grafikon objekta je rekonstruiran od readObject-a.
Glavni objekt je kompletno obnovljen kada su sva njegova polja i objekti koje referencira kompletno obnovljeni. Ovdje, povratna validacija objekta je izvršena u slijedu baziranom na njegovom registriranom prioritetu. Povratna veza je registrirana od strane objekta dok je on individualno obnovljen.
Iznimka je izbačena ako se dogodi problem sa Input tokom i klasama koje ne smiju biti deserijalizirane. Sve iznimke su kobne za Input tok i ostavlja ga u neodređenom stanju.
Određena od:
readObject in interface ObjectInput
Vraća: Objekt pročitan iz toka
Izuzeci: ClassNotFoundException – Klasa serijaliziranog objekta ne može biti pronađenaInvalidClassException - Something is wrong with a class used by serialization. StreamCorruptedException - Control information in the stream is inconsistent. OptionalDataException - Primitive data was found in the stream instead of objects. IOException - Any of the usual Input/Output related exceptions.
write
public void write(byte[] b) throws IOException
Ova metoda zapisuje b dužinu bajtova iz specificiranog ajt polja u ovaj izlazni tok.
Glavni dogovor za write(b) je da bi trebao imati točno jednaki efekt kao poziv write(b, o, b.length).
Parametri: b– podatak
![Page 8: Seminarski Rad ObjectInputStream](https://reader030.vdocuments.pub/reader030/viewer/2022020222/577c7e651a28abe054a0f8b8/html5/thumbnails/8.jpg)
Izuzeci:IOException – Ako se dogodi I/O greška
writer
public void write(byte[] b, int off, int len) throws IOException
Zapisuje dužinu bajtova iz specificiranog bajt polja startajući kod granaja off ovog izlaznog toka. Glavni dogovor za write (b, off, len) je da su neki bajtovi u polju b zapisani u izlazni tok u poretku; element b[off] je prvi bajt koji je zapisan a b[off+len-¸1] je zadnji bajt koji je zapisan ovom operacijom.
Ako je b jednak nuli, NullPointerException je poslana.
Ako je off negativan, ili je len negativan, ili ako je off+len veći od dužine polja b, tada je poslana iznimka IndexOutOfBoundsException.
Parametri: b- podatakoff- startni ogranak u podatkulen – broj bajtova za zapis
Izuzeci:IOException – Ako se dogodi I/O greška. Posebice IOException može biti izbačena ako je izlazni tok zatvoren.
flush
public void flush() throws IOException
Poplavljuje ovaj izlazni tok i tjera svaki baferiran izlazni bajt da bude zapisan. Glavni dogovor kod flush je da se pozove ako su indikacije za to, ako je bilo koji bajt prethodno zapisan buferiran od impementacije izlaznog toka, takvi bajtovi moraju odmah biti zapisani na njihovo zamišljeno mjesto.
![Page 9: Seminarski Rad ObjectInputStream](https://reader030.vdocuments.pub/reader030/viewer/2022020222/577c7e651a28abe054a0f8b8/html5/thumbnails/9.jpg)
Flush metoda OutputStream – a ne radi ništa.
Izuzeci:IOException – Ako se dogodi I/O greška
close
public void close() throws IOException
Zatvara ovaj izlazni tok i pušta sve sistemske resurse povezane sa ovim tokom. Glavni dogovor kod close je ta zatvori izlazni tok. Zatvoreni tok ne može činiti izlazne operacije i ne može biti ponovno otvoren.
Close metoda OutputStream – a ne radi ništa.
Izuzeci:IOException – Ako se dogodi I/O greška
Klasa OutputStreamWriter
![Page 10: Seminarski Rad ObjectInputStream](https://reader030.vdocuments.pub/reader030/viewer/2022020222/577c7e651a28abe054a0f8b8/html5/thumbnails/10.jpg)
java.io Class OutputStreamWriterjava.lang.Object java.io.Writer java.io.OutputStreamWriter
Direktna podklasa - FileWriter
public class OutputStreamWriter extends Writer
OutputStreamWriter je most između znakovnog toka i bajtovnog toka. Znakovi zapisani u njega su kodirani u bajtove koristeći specijalni charset. Taj skup znakova koji on koristi može biti specificiran imenim ili može biti dat eksplicitno, ili može biti prihvaćen znakovni skup platforme.
Svaka invookacija write() metode uzrokuje da konverter za kodiranje bude pozvan na zadanim znakovima. Rezultirani bajtovi su nakupljeni u buferu prije nego što su zapisani u donji izlazni tok. Veličina ovog bufera može biti specificirana ali i default veličina je dovoljno velika za većinu namjena. Znakovi prebačeni write() metodom nisu buferirani.
Za vrhunsku efikasnost, uzimajući u obzir omotavanje OutputStreamWriter – a između BufferedWriter – a kako bi se izbjegle učestale invokacije konvertera. Na primjer:
Writer out = new BufferedWriter(new OutputStreamWriter(System.out));
Polja( Fields )
lock
lock
.
Konstruktori ( Constructors )
![Page 11: Seminarski Rad ObjectInputStream](https://reader030.vdocuments.pub/reader030/viewer/2022020222/577c7e651a28abe054a0f8b8/html5/thumbnails/11.jpg)
OutputStreamWriter
Public OutputStreamWriter(OutputStream out, String charsetName)Throws UnsupportedEncodingException
Kreira OutputStreamWriter koji koristi navedeni skup znakova.
Parametri:out – izlazni tokcharsetName – naziv skupa znakova
Izuzeci:UnsupportedEncodingException – Ako navedeno kodiranje nije podržano
OutputStreamWriter
public OutputStreamWriter(OutputStream out)
Kreira OutputStreamWriter koji koristi zadano znakovno kodiranje
Parametri:out – izlazni tok
OutputStreamWriter
public OutputStreamWriter(OutputStream out, Charset cs)
Kreira OutputStreamWriter koji koristi zadani skup znakova.
Parametri:out – izlazni tokcs – skup znakova
OutputStreamWriter
public OutputStreamWriter(OutputStream out, CharsetEncoder enc)
Kreira OutputStreamWriter koji koristi zadani skup znakova za kodiranje
Parametri:out – izlazni tokenc – skup znakova za kodiranje
![Page 12: Seminarski Rad ObjectInputStream](https://reader030.vdocuments.pub/reader030/viewer/2022020222/577c7e651a28abe054a0f8b8/html5/thumbnails/12.jpg)
Metode ( Methods )
getEncoding
public String getEncoding()
Vraća ime znaka za kodiranje koji je korišten od strane toka.
Ako kodiranje ima povijesno ime, ime je vraćeno, inače je kodirano kanoničko ime vraćeno.
Ako je kreirana instanca sa OutputStreamWriter(OutputStream, String) , konstruktor tada vraćeno ime, koje je jedinstveno za kodiranje može razlikovati od imena poslanom konstruktoru. Ova metoda može vratiti vrijednost nule ako je tok zatvoren.
write
public void write(int c) throws IOException
Zapisuje jedan znak.
Parametri:c – int specificira znak koji će biti zapisan
Izuzeci:IOException – Ako se dogodi I/O greška
write
public void write(char[] cbuf, int off, int len) throws IOException
Zapisuje dio iz polja znakova.
Parametri:
![Page 13: Seminarski Rad ObjectInputStream](https://reader030.vdocuments.pub/reader030/viewer/2022020222/577c7e651a28abe054a0f8b8/html5/thumbnails/13.jpg)
cbuf – Polje znakovaoff - ogranak od kuda počinje pisanje znakovalen – broj znakova za zapisivanje
Izuzeci:IOException – Ako se dogodi I/O greška
write
public void write(String str, int off, int len) throws IOException
Zapisuje dio stringova.
Parametri: str – stringoff - ogranak od kuda počinje pisanje znakovalen – broj znakova za zapisivanje
Izuzeci:IOException – Ako se dogodi I/O greška
flush
public void flush() throws IOException
Poplavljuje tok.
Izuzeci:IOException – Ako se dogodi I/O greška
close
public void close() throws IOException
Zatvara tok.
Izuzeci:IOException – Ako se dogodi I/O greška
![Page 14: Seminarski Rad ObjectInputStream](https://reader030.vdocuments.pub/reader030/viewer/2022020222/577c7e651a28abe054a0f8b8/html5/thumbnails/14.jpg)
Primjeri korištenja klase BufferedWriter
* * Java Network Programming, Second Edition * Merlin Hughes, Michael Shoffner, Derek Hamner * Manning Publications Company; ISBN 188477749X * * http://nitric.com/jnp/ * * Copyright (c) 1997-1999 Merlin Hughes, Michael Shoffner, Derek Hamner; * all rights reserved; see license.txt for details. */
import java.io.*;
public class SimpleOut { public static void main (String[] args) throws IOException { for (int i = 0; i < args.length; ++ i) { println (args[i]); } }
public static void println (String msg) throws IOException { synchronized (System.out) { for (int i = 0; i < msg.length (); ++ i) System.out.write (msg.charAt (i) & 0xff); System.out.write ('\n'); } System.out.flush (); }}
/* all of the write() methods of class OutputStream are declared as throwing IOException */