Clasele DataInputStream si DataOutputStream
- Detalii
- Categorie: Programare Java
- Accesări: 2,716
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(); } } }