Documente Academic
Documente Profesional
Documente Cultură
Fluxurile I/O binare (la nivel de octeți) nu necesită conversii de cod. Dacă vom scrie o valoare
numerică folosind fluxuri binare valoare exactă din memorie va fi transferată în fişier.
De exemplu, valoare în byte a 199 în memorie este 0XC7, exact așa va apărea în fișierul binar. Figura
(b) de mai sus.
În general , trebuie să folosim fluxuri I/O bazate pe caractere atunci cînd lucram cu fişiere create de
editoare text şi fluxuri I/O binare pentru lucrul cu fișierele binare create de JVM.
Fișierele binare sunt independente de schema de codificare a SO ceea ce oferă portabilitate.
Programele java pe orice calculator pot citi fișierele binare create de java.
De aceea clasele java sunt fişiere binare. Fișierele java *.class pot rula pe JVM pe orice calculator.
Exemplul2. Citiți de la tastatură o secvență de numere. Introduceți într-un fișier doar numerele divizibile la 5.
import java.util.*;
import java.io.*;
public class Individual_1 {
opreavictoria86@gmail.com © MUSTEAȚĂ Victoria
2
Programarea Orientata Spre Obiecte, Limbajul Java, 2019-2020 CEITI
public static void main (String [] args) throws IOException{
Writer out = new FileWriter("out.txt");
Scanner in = new Scanner(System.in);
System.out.println("Cite numere ? ");
int n = in.nextInt();
for(int i=1; i<=n; i++){
int x = in.nextInt();
if (x%5==0) out.write(Integer.toString(x)+" ");
} out.close(); in.close();}}
Presupunem că avem deja un obiect serializat anterior, salvat într-un fişier sau BD sau memorie,
pentru a deserializa obiectul vom folosi clasele de deserializare şi fluxurile de intrare la nivel de octeţi
care reconstruiesc obiectul original.
import java.io.*;
class Angajat implements Serializable {
private String nume;
private int ani;
public String getNume(){ return nume;}
public void setNume(String nume){this.nume=nume;}
public int getAni(){return ani;}
public void setAni(int ani){this.ani=ani;}
}
//serializare
class TestAngajat {
public static void main (String [] args){
Angajat persoana=new Angajat();
persoana.setNume("Tehnologii Moderne ");
persoana.setAni(4);
try {
FileOutputStream file=new FileOutputStream("out.ser");
ObjectOutputStream st= new ObjectOutputStream(file);
st.writeObject(persoana);
file.close();
}catch ( IOException ex){ ex.printStackTrace();}
}}
//deserializare
class TestDeserializareAngajat{
public static void main(String [] args){
try {
FileInputStream file=new FileInputStream("out.ser");
ObjectInputStream st= new ObjectInputStream(file);
Angajat persoana=(Angajat)st.readObject();
st.close();
file.close();
System.out.println("Numele angajatului:"+persoana.getNume());
System.out.println("Virsta angajatului :"+persoana.getAni());
}catch (IOException ex){ ex.printStackTrace();
} catch (ClassNotFoundException e) {e.printStackTrace();}}}
Dezavantajul mecanismului implicit de serializare este că algoritmul pe care se beazează, fiind creat
pentru cazul general, se poate comporta ineficient în anumite situaţii concrete: poate fi mult mai
lent decît este cazul sau reprezentarea binară generată pentru un obiect poate fi mult mai
voluminoasă decît ar trebui. În aceste situaţii, putem să înlocuim algoritmul implicit cu unul propriu,
particularizat pentru o clasă anume pentru ca clasa să poată avea mai mult control asupra serializării.
Acest lucru se realizează prin supradefinirea (într-o clasă serializabilă!) a metodelor
writeObject() şi readObject() avînd exact signatura :
class TestPersoanaSerializare {
public static void main (String [] args){
try {
Persoana om=new Persoana("Musteata Victoria",1001);
La general serializarea se foloseşte atunci cînd avem nevoie ca datele încapsulate într-o instanţă
a unei clase să poată exista înafara timpului de execuţie a unei maşini virtuale.
Surse:
1. http://www.ms.sapientia.ro/~manyi/teaching/oop/oop_romanian/curs8/curs8.html
2. Java de la 0 la expert , pag.268
3. https://docs.oracle.com/javase/7/docs/api/java/io/Writer.html
4. https://docs.oracle.com/javase/7/docs/api/java/io/Reader.html
5. https://docs.oracle.com/javase/7/docs/api/java/io/PrintWriter.html
6. Y. Daniel Liang , Introduction to Java Programming - 9th Edition, 9th Edition, Capitol 19
7. http://www.arh.pub.ro/lab/poo/lab3.html
8. http://www.tutorialspoint.com/java/io/java_io_bufferedreader.htm
9. http://www.tutorialspoint.com/java/java_serialization.htm
10. Cristian Frăsinaru , Curs Practic de Java , pag . 177