Clasele DataInputStream si DataOutputStream

Aceste clase ofera metode prin care un flux nu mai este vazut ca o însiruire de octeti, ci ca o sursa de date primitive. Prin urmare vor furniza metode pentru citirea si scrierea datelor la nivel de tip de data si nu la nivel de octet. Constructorii si metodele cele mai importante sunt urmatoarele:

DataInputStream

 DataInputStream(InputStream in) //Constructor
    readBoolean( )
    readByte( )
    readChar( )
    readDouble( )
    readFloat( )
    readInt( )
    readLong( )
    readShort( )
    readUnsignedByte( )
    readUnsignedShort( )
    String readUTF( )

DataOuputStream

DataOutputStream(OutputStream out) //Constructor
 writeBoolean( boolean v )
 writeByte( int v )
 writeChar( int v )
 writeDouble( double v )
 writeFloat( float v )
 writeInt( int v )
 writeLong( long v )
 writeShort( int v ) 
 writeBytes( String s )
 writeChars( String s )
 writeUTF( String str ) 

Aceste metode au denumirile generice de readXXX si writeXXX specificate de interfetele DataInput si DataOutput. Pot provoca exceptii de tipul IOException.

Fluxuri standard de intrare/iesire

Orice program Java poate are :

  • intrare standard
  • iesire standard
  • iesire standard pentru erori

In general intrarea standard este tastatura, iar iesirea standard este ecranul. Intrarea si iesirea standard sunt de fapt niste obiecte precreate ce descriu fluxuri de date pentru citirea respectiv scrierea la dispozitivele standard ale sistemului. Aceste obiecte sunt definite publice în clasa System si sunt:

  • System.in - flux standard de intrare; clasa InputStream
  • System.out - flux standard de iesire; clasa PrintStream
  • System.err - flux standard pentru afisarea erorilor; clasa PrintStream

Afisarea informatiilor pe ecran

Pentru afisarea informatiilor pe ecran se foloseste fluxul standard de iesire; el este folosit la afisarea oricaror rezultate pe ecran (în modul consola):

System.out.println("mesaj").

Fluxul standard pentru afisarea erorilor se foloseste similar:

catch (IOException e) { System.err.println("Eroare de intrare/iesire!") }

Fluxurile de iesire pot fi folosite asadar fara probleme deoarece tipul lor este PrintStream, clasa primitiva pentru scrierea efectiva a datelor. In schimb fluxul standard de intrare System.in este de tip InputStream care este o clasa abstracta, deci pentru a-l putea utiliza va trebui sa-l folosim împreuna cu un flux de procesare a datelor sau cu orice alt flux ce permite citirea efectiva a datelor.

Citirea datelor de la tastatura

Daca dorim sa citim o intreaga linie de la tastatura putem folosi metoda readLine pentru citirea datelor de la tastatura si din acest motiv vom folosi intrarea standard împreuna cu o clasa de procesare care implementeaza metoda readLine.

Exemplu : fisier sursa java Linie.java

import java.io.*; 
public class Linie {
    public static void main(String[] args)
    {
        BufferedReader stdin = new BufferedReader(new
                InputStreamReader(System.in));
        String line;
        try
        { 
             while((line = stdin.readLine()).length() != 0)
             System.out.println(line);
            //Programul se opreste cu o linie vida
        } catch(IOException e)
        {e.printStackTrace();}
    }
} 

Redirectarea intrarii/iesirii standard

Clasa System are metode statice pentru a redirecta fluxurile de intrare si iesire standard. Aceste metode sunt:

  • setIn(InputStream) - redirectare intrare
  • setOut(PrintStream) - redirectare iesire
  • setErr(PrintStream) - redirectare erori

Redirectarea iesirii este utila în special atunci când sunt afisate foarte multe date pe ecran si acestea se deruleaza mai repede decât putem citi. Putem redirecta afisarea catre un fisier pe care sa-l citim dupa executia programului. Secventa clasica de redirectare a iesiriieste:

PrintStream out = new PrintStream(new BufferedOutputStream(new  FileOutputStream("afisare.out")));
System.setOut(out);

Redirectarea intrarii poate fi utila pentru un program consola care primeste niste valori de intrare. Pentru a nu le scrie de la tastatura de fiecare data în timpul testarii programului ele pot fi puse într-un fisier, redirectând intrarea standard. In momentul când testarea programului a luat sfârsit redirectarea poate fi eliminata, datele fiind cerute din nou de la tastatura.

Exemplu: //fisier sursa java Redirectare.java

class Redirectare {
    public static void main(String[] args) {
        try {
            BufferedInputStream in = new BufferedInputStream(new FileInputStream("Redirectare.java"));
            PrintStream out = new PrintStream(new BufferedOutputStream( new FileOutputStream("test.out")));
            System.setIn(in);
            System.setOut(out);
            System.setErr(out);
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            String line = null;
            String s;
            while((s = br.readLine()) != null)
                    line = br.readLine();
                   System.out.println(line);
            out.close();
        } catch(IOException e) {
            e.printStackTrace();
        }
    }
}

Share on


Echipa conspecte.com, crede cu adevărat că studenții care studiază devin următoarea generație de aventurieri și lideri cu gândire globală - și dorim ca cât mai mulți dintre voi să o facă!