Documente Academic
Documente Profesional
Documente Cultură
Schema generală
Una dintre metodele prin care putem îmbogăţi funcţionalitatea unei clase C
este cea de a declara în ea un câmp d de tipul altei clase D şi de a iniţializa acest câmp
printr-un constructor:
class C {
D d;
C(D d) {this.d=d; }
. . .
}
În acest mod, în metodele clasei C putem invoca metode ale clasei D, prin
intermediul obiectului d.
În cazul în care clasa D extinde clasa C, această tehnică poartă numele de
suprapunerea de obiecte, care aplicată la fluxuri de intrare/ieşire se numeşte
suprapunere de fluxuri. În această situaţie sintagma "suprapunerea obiectelor adaugă
noi facilităţi (funcţionalităţi)", înseamnă adaptarea metodelor clasei suprapuse la
contextul clasei care o suprapune.
Facilităţile de intrare/ieşire din Java au la bază noţiunea de flux. Un flux este o
succesiune de elemente (octeţi sau caractere), citite şi scrise secvenţial.
Pentru un flux de intrare sursa datelor poate fi un fişier, dar şi un şir sau tablou
de octeţi, respectiv caractere. Pentru un flux de ieşire, datele transmise sunt stocate
într-un fişier sau într-un tablou de octeţi, respectiv caractere. Este posibilă (şi chiar
recomandată) utilizarea zonelor tampon. De asemenea este posibil ca un flux de ieşire
să "comunice" cu un flux de intrare, în sensul că datele scrise în fluxul de ieşire vor
constitui sursa pentru fluxul de intrare.
Dacă la citire nu sunt încă date disponibile în flux şi nu s-a detectat sfârşitul
fluxului, atunci firul de executare care realizează citirea va fi blocat până când vor
exista date disponibile. Analog, în cazul a două fluxuri comunicante ce folosesc o
zonă tampon, firul de executare care are sarcina să scrie va fi blocat în situaţia în care
zona tampon este plină.
O primă clasificare a fluxurilor are în vedere elementele de bază care sunt
transmise: caractere sau octeţi.
Object
InputStream (clasă abstractă pt. citire la nivel de octet)
OutputStream (clasă abstractă pt. scriere la nivel de octet)
Reader (clasă abstractă pt. citire la nivel de caracter)
Writer (clasă abstractă pt. scriere la nivel de caracter)
• Interfaţa DataOutput
Conţine metode menite a scrie, într-un flux de ieşire neprecizat, date de tipuri
primitive, precum şi şiruri de caractere.
void write(int b)
void writeBytes(String s) throws NullPointerException
void writeChars(String s) throws NullPointerException
void writeUTF(String s) void writeBoolean(boolean v)
void writeByte(int v) void writeShort(int v)
void writeChar(int v) void writeInt(int v)
void writeLong(long v) void writeFloat(float v)
void writeDouble(double v)
• Interfaţa DataInput
int skipBytes(int n) boolean readBoolean()
byte readByte() int readUnsignedByte()
short readShort() int readUnsignedShort()
char readChar() int readInt()
long readLong() float readFloat()
double readDouble() String readLine()
String readUTF()
Object
DataInput (interfaţă)
InputStream (clasă abstractă)
FileInputStream
FilterInputStream
DataInputStream
BufferedInputStream
PipedInputStream
DataOutput (interfaţă)
OutputStream (clasă abstractă)
FileOutputStream
FilterOutputStream
DataOutputStream
Buffered OutputStream
PrintStream
PipedOutputStream
class Banda {
PIS pis; PipedOutputStream pos; int lung;
Banda(int l) {
try {
lung = l; IO.writeln("lung = "+lung);
pis = new PIS(); pos = new PipedOutputStream();
pis.connect(pos);
}
catch (IOException e) { }
}
class Piped {
public static void main(String[] sir) {
Banda f = new Banda(2);
Prod P = new Prod(f); Cons C = new Cons(f);
C.start(); P.start();
}
}
Clasa Scanner