Sarjallistaminen. Juha Järvensivu 2007

Samankaltaiset tiedostot
OutputStream ja InputStream. Tietovirrat ja niiden suunnat. Tietovirtojen käyttö. FileInputStream esimerkki. DataOutputStream ja DataInputStream

Sisältö. Johdanto. Tiedostojen lukeminen. Tiedostojen kirjoittaminen. 6.2

Sisältö Johdanto. Tiedostojen lukeminen. Tiedostojen kirjoittaminen. 26.2

Sisältö. Johdanto. Tiedostojen lukeminen. Tiedostojen kirjoittaminen. 6.2

Leikepöydän käyttö.net ja QT. Juha Järvensivu 2008

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op. Poikkeukset ja tietovirrat: Virhetilanteiden ja syötevirtojen käsittely

JAVA-PERUSTEET. JAVA-OHJELMOINTI 3op A JAVAN PERUSTEET LYHYT KERTAUS JAVAN OMINAISUUKSISTA JAVAN OMINAISUUKSIA. Java vs. C++?

Metodien tekeminen Javalla

16. Javan omat luokat 16.1

Ohjausjärjestelmien jatkokurssi. Visual Basic vinkkejä ohjelmointiin

Ohjelmointi 2 / 2010 Välikoe / 26.3

Metodit Arvotyyppi. Metodit Arvotyyppi. Metodit Parametrit. Metodit Parametrit. Metodit Kuormittaminen. Metodit Kuormittaminen. Javan perusteet

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

Rajapinta (interface)

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti:

Mikä yhteyssuhde on?

Olio-ohjelmointi Javalla

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä. Tiedonkätkentä. Aksessorit. 4.2

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2

Ohjelmoinnin jatkokurssi, kurssikoe

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

1 Tehtävän kuvaus ja analysointi

2. Lisää Java-ohjelmoinnin alkeita. Muuttuja ja viittausmuuttuja (1/4) Muuttuja ja viittausmuuttuja (2/4)

Java kahdessa tunnissa. Jyry Suvilehto

8. Näppäimistöltä lukeminen 8.1

Ohjelmointityö 3. Mikko Laamanen

2. Olio-ohjelmoinista lyhyesti 2.1

15. Ohjelmoinnin tekniikkaa 15.1

15. Ohjelmoinnin tekniikkaa 15.1

Kompositio. Mikä komposition on? Kompositio vs. yhteyssuhde Kompositio Javalla Konstruktorit set-ja get-metodit tostring-metodi Pääohjelma

Ohjelmointi 2 / 2008 Välikoe / Pöytätestaa seuraava ohjelma.

C# ja.net. Juha Järvensivu 2007

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

Metodit. Metodien määrittely. Metodin parametrit ja paluuarvo. Metodien suorittaminen eli kutsuminen. Metodien kuormittaminen

Javan perusteita. Janne Käki

Java-kielen perusteet

Osio 4: Tietovirrat. Properties- eli ominaisuustiedostot Logger: lokitietojen käsittely

7. Näytölle tulostaminen 7.1

Olio-ohjelmointi Tiedostot ja tietovirrat

Graafisen käyttöliittymän ohjelmointi Syksy 2013

812341A Olio-ohjelmointi, IX Olioiden välisistä yhteyksistä

Ohjelmistojen mallintamisen ja tietokantojen perusteiden yhteys

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

Luokka Murtoluku uudelleen. Kirjoitetaan luokka Murtoluku uudelleen niin, että murtolukujen sieventäminen on mahdollista.

Rinnakkaisohjelmointi kurssi. Opintopiiri työskentelyn raportti

Tiedostonkäsittely ja asetusten tallentaminen. Graafisen käyttöliittymän ohjelmointi Luento 14

Java-kielen perusteita

17. Javan omat luokat 17.1

Listarakenne (ArrayList-luokka)

18. Abstraktit tietotyypit 18.1

Kääreluokat (oppikirjan luku 9.4) (Wrapper-classes)

Ohjelmoinnin perusteet Y Python

Ohjelmistojen mallintaminen viikon 4 laskareiden mallivastauksia

4. Olio-ohjelmoinista lyhyesti 4.1

A) on käytännöllinen ohjelmointitekniikka. = laajennetaan aikaisemmin tehtyjä luokkia (uudelleenkäytettävyys)

on ohjelmoijan itse tekemä tietotyyppi, joka kuvaa käsitettä

Tietokannat II -kurssin harjoitustyö

Sisällys. 18. Abstraktit tietotyypit. Johdanto. Johdanto

Java-API, rajapinnat, poikkeukset, UML,...

1.3Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Pakkaukset ja määreet

Vertailulauseet. Ehtolausekkeet. Vertailulauseet. Vertailulauseet. if-lauseke. if-lauseke. Javan perusteet 2004

Pino S on abstrakti tietotyyppi, jolla on ainakin perusmetodit:

8. Näppäimistöltä lukeminen 8.1

Java-kielen perusteet

12. Näppäimistöltä lukeminen 12.1

Java UI-komponentit (JTable) Juha Järvensivu 2007

Sisällys. 6. Metodit. Oliot viestivät metodeja kutsuen. Oliot viestivät metodeja kutsuen

Sisällys. 12. Näppäimistöltä lukeminen. Yleistä. Yleistä

17. Javan omat luokat 17.1

Java-kielen perusteet

20. Javan omat luokat 20.1

Sisällys. 20. Javan omat luokat. Java API. Pakkaukset. java\lang

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Rajapinnat ja sisäluokat

Taulukot. Jukka Harju, Jukka Juslin

A TIETORAKENTEET JA ALGORITMIT

4. Luokan testaus ja käyttö olion kautta 4.1

Tietojen syöttäminen ohjelmalle. Tietojen syöttäminen ohjelmalle Scanner-luokan avulla

7/20: Paketti kasassa ensimmäistä kertaa

Informaatioteknologian laitos Olio-ohjelmoinnin perusteet / Salo

9. Periytyminen Javassa 9.1

Sisällys. Metodien kuormittaminen. Luokkametodit ja -attribuutit. Rakentajat. Metodien ja muun luokan sisällön järjestäminen. 6.2

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Taulukot & Periytyminen

Pakkauksen kokoaminen

Luokat ja oliot. Ville Sundberg

Tapahtumapohjainen ohjelmointi. Juha Järvensivu 2007

815338A Ohjelmointikielten periaatteet Harjoitus 5 Vastaukset

Sisällys. JAVA-OHJELMOINTI Osa 7: Abstrakti luokka ja rajapinta. Abstraktin luokan idea. Abstrakti luokka ja metodi. Esimerkki

9. Periytyminen Javassa 9.1

Harjoitus 5 (viikko 48)

Olio-ohjelmointi: Luokkien toteuttaminen. Jukka Juslin

Tehtävä 1. Tehtävä 2. Arvosteluperusteet Koherentti selitys Koherentti esimerkki

Periytyminen (inheritance)

1.3 Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä

Metodien tekeminen Javalla

Rajapinnasta ei voida muodostaa olioita. Voidaan käyttää tunnuksen tyyppinä. Rajapinta on kuitenkin abstraktia luokkaa selvästi abstraktimpi tyyppi.

Sisällys. 9. Periytyminen Javassa. Periytymismekanismi Java-kielessä. Periytymismekanismi Java-kielessä

Sisällys. 9. Periytyminen Javassa. Periytymismekanismi Java-kielessä. Periytymismekanismi Java-kielessä

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

3. Binääripuu, Java-toteutus

Transkriptio:

Sarjallistaminen Juha Järvensivu juha.jarvensivu@tut.fi 2007

Sisällys 1. tunti: Sarjallistaminen.NET ympäristössä 2. tunti: Sarjallistaminen Java ympäristöstä

Sarjallistaminen Muutetaan objektin tila muotoon, jossa se voidaan tallettaa tiedostoon, leikepöydälle tai siirtä verkon yli toiselle koneelle

Sarjallistaminen Serialization Olioiden kirjoittamista tulosvirtaan (tiedostoon) DeSerialization Olioiden lukemista virrasta (tiedostosta)

.NET-sarjallistaminen System.IO System.Runtime.Serialization System.Runtime.Serialization.Formatters.Binary

System.IO FileSystemInfo Tiedostoille ja hakemistoille yhteiset operaatiot long CreationTime long LastAccessTime FileInfo Tiedoston käsittelyyn tarvittavat operaatio CopyTo(string destfile) MoveTo(string destfile) Delete() DirectoryInfo Hakemistojen käsittelyyn tarvittavat operaatiot CreateDirectory(string path) GetDirectories() GetFiles()

System.IO File Vastaavat metodit kuin FileInfo-luokalla Metodit toteutettu staattisina metodeina Yksittäiselle operaatiolle nopeampia Directory Vastaavat metodit kuin DirectoryInfo luokalla

Binäärimuotoinen sarjallistaminen Tallettaa oliot tiedostoon binäärimuodossa Tehokas Tiedoston sisältö ei muiden ohjelmien ymmärtämässä muodossa

Serialize attribute Jokainen sarjallistuva luokka pitää merkata määreelllä [Serializable()] Yksittäinen kenttä voidaan ohittaa kirjoittamalla sen eteen määre [NonSerialized()]

Sarjallistuva luokka // A test object that needs to be serialized. [Serializable()] public class TestObject { public int member1; public string member2; public string member3; public double member4; // A field that is not serialized. [NonSerialized()] public string member5; } public TestObject() { }

Binääritiedostoon kirjoittaminen // Luodaan sarjallistettava olio TestObject obj = new TestObject(); TestObject obj2 = new TestObject(); // Luodaan tietovirtaolio FileStream fs = new FileStream(filename,FileMode.Create); // Sarjallistetaan binäärimuodossa BinaryFormatter f = new BinaryFormatter(); // Kirjoitetaan data levylle f.serialize(fs,obj); f.serialize(fs,obj2); // Suljetaan tietovirta fs.close();

Binääritiedostosta lukeminen // Luodaan tietovirta ja formatter-olio FileStream fs = new FileStream(filename,FileMode.Open); BinaryFormatter formatter = new BinaryFormatter(); // Luetaan oliot samassa järjestyksessä kuin ne on // virtaan kirjoitettu obj1 = (TestObject)formatter.Deserialize(fs); obj2 = (TestObject)formatter.Deserialize(fs); // Suljetaan tietovirta fs.close();

Muistiin sarjallistaminen byte[] buffer; // Oliot sarjallistetaan muistivirtaan MemoryStream memstream = new MemoryStream(); IFormatter binaryformatter = new BinaryFormatter(); binaryformatter.serialize(memstream,obj1); binaryformatter.serialize(memstream,obj2); // Tallennetaan data byte-taulukkoon buffer = memstream.getbuffer(); memstream.close();

Muistiin sarjallistaminen byte[] buffer; MemoryStream memstream = new MemoryStream(buffer); IFormatter bf = new BinaryFormatter(); obj1 = (TestObject ) bf.deserialize(memstream); obj2 = (TestObject ) bf.deserialize(memstream); memstream.close();

Taulukon sarjallistaminen Myös taulukon sisällön voi sarjallistaa kunhan kaikki taulukossa olevat oliot on määritelty sarjallistuviksi! ArrayList alist = new ArrayList(); alist.add(obj1); alist.add(obj2); MemoryStream memstream = new MemoryStream(); IFormatter binaryformatter = new BinaryFormatter(); binaryformatter.serialize(memstream,alist);

SerializationException

OpenFileDialog System.Windows.Forms.OpenFileDialog

OpenFileDialog // Luodaan dialogi OpenFileDialog openfiledialog1 = new OpenFileDialog(); // Asetetaan hakemisto, johon dialogi oletuksena avataan openfiledialog1.initialdirectory = "c:\\" ; // Määritetään hyväksytyt tiedostotyyppi openfiledialog1.filter = "txt files (*.txt) *.txt All files (*.*) *.*" ; // Oletustiedostotyyppi openfiledialog1.filterindex = 2; // Avataan dialogi käyttäjälle if(openfiledialog1.showdialog() == DialogResult.OK) { }

SaveFileDialog System.Windows.Forms.SaveFileDialog

SaveFileDialog // Luodaan dialogi SaveFileDialog savefiledialog1 = new SaveFileDialog(); // Asetetaan hakemisto, johon dialogi oletuksena avataan savefiledialog1.initialdirectory = "c:\\" ; // Määritetään hyväksytyt tiedostotyyppi savefiledialog1.filter = "txt files (*.txt) *.txt All files (*.*) *.*" ; // Oletustiedostotyyppi savefiledialog1.filterindex = 2; // Avataan dialogi käyttäjälle if(savefiledialog1.showdialog() == DialogResult.OK) { }

FileDialog.Filter Määrittää tiedostodialogin hyväksymät tiedostotyypit Text files (*.txt) *.txt All files (*.*) *.*" Image Files(*.BMP;*.JPG;*.GIF) *.BMP;*.JPG;*.GIF All files (*.*) *.*

FolderBrowserDialog System.Windows.Form.FolderBrowserDial og Dialogi hakemiston valintaan

Esimerkki.NET

Sisällys 1. tunti: Sarjallistaminen.NET ympäristössä 2. tunti: Sarjallistaminen Java ympäristöstä

Java sarjallistaminen Java.IO File FileInputStream FileOutputStream ObjectInputStream ObjectOutputStream

System.IO.File boolean isdirectory() long lastmodified() long length() Tiedoston koko Hakemiston kohdalla määrittelemätön File[] listfiles() Palauttaa null, jos kyseessä on tiedosto

Interface Serializable Kaikkien sarjallistuvien luokkien tulee toteuttaa Serializable rajapinta public class DataItem implements Serializable { string name; int value; }

FileInputStream / FileOutputStream Java.IO.FileInputStream read(byte[]) Java.IO.FileOutputStream write(byte[])

ObjectInputStream / ObjectOutputStream Java.IO.ObjectInputStream ObjectreadObject() intreadint() Java.IO.ObjectOutputStream writeobject(object obj) writeint(int value)

Sarjallistuva luokka public class TestObject implements Serializable { private String data; private int number; } public TestObject() { }

TestObject obj1 = new TestObject(); TestObject obj2 = new TestObject(); Binääritiedostoon kirjoittaminen FileOutputStream out = new FileOutputStream(FILE_NAME); ObjectOutputStream s = new ObjectOutputStream(out); // Kokonaisluvun tallentaminen s.writeint(2); // Olion tallentaminen s.writeobject(obj1); s.writeobject(obj2); // Virtojen sulkeminen s.flush(); out.close();

Binääritiedostosta lukeminen FileInputStream input = new FileInputStream(FILE_NAME); ObjectInputStream s = new ObjectInputStream(input); // Kokonaisluvun lukeminen int count = s.readint(); // Virtaan tallennettujen objektien lukeminen obj1 = s.readobject(); obj2 = s.readobject(); // Tietovirran sulkeminen input.close();

JFileChooser

OpenFileDialog JFileChooser fc = new JFileChooser(); fc.setfileselectionmode(jfilechooser.files_and DIRECTORIES); int retval = fc.showopendialog(); /*int retval = fc.showsavedialog();*/ File file = fc.getselectedfile();

Esimerkki

Lähteet System.IO.FileSystemInfo http://msdn.microsoft.com/library/default.asp?url=/library/enus/cpref/html/frlrfsystemiofilesysteminfoclasstopic.asp System.IO.DirectoryInfo http://msdn.microsoft.com/library/default.asp?url=/library/enus/cpref/html/frlrfsystemiodirectoryinfoclasstopic.asp System.IO.FileInfo http://msdn.microsoft.com/library/default.asp?url=/library/enus/cpref/html/frlrfsystemiofileinfoclasstopic.asp System.IO.File http://msdn.microsoft.com/library/default.asp?url=/library/enus/cpref/html/frlrfsystemiofileclasstopic.asp System.IO.Directory http://msdn.microsoft.com/library/default.asp?url=/library/enus/cpref/html/frlrfsystemiodirectoryclasstopic.asp

Lähteet OpenFileDialog http://msdn.microsoft.com/library/default.asp?url=/library/enus/cpref/html/frlrfsystemwindowsformsopenfiledialogclasstopic.asp SaveFileDialog http://msdn.microsoft.com/library/default.asp?url=/library/enus/cpref/html/frlrfsystemwindowsformssavefiledialogclasstopic.asp FolderBrowserDialog http://msdn.microsoft.com/library/default.asp?url=/library/enus/cpref/html/frlrfsystemwindowsformsfolderbrowserdialogclasstopic.asp Java sarjallistaminen http://java.sun.com/docs/books/tutorial/essential/io/serialization.html Java.IO.File http://java.sun.com/j2se/1.4.2/docs/api/java/io/file.html