Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    java: perchè utilizzare i filtri?

    ecco qui un esempio dal mio libro:
    codice:
    import java.io.*;
    
    public class PipedIOSample extends Thread{
    	static PipedInputStream iStream = new PipedInputStream();
    
    	
    
    
    	public void run(){
    		try {
    			String str;
    			while (true) {
    				str = iStream.read([oStream]);
    				System.out.println("letta: _" + str);
    			}
    		}
    		catch(IOException e) {
    			e.printStackTrace();
    		}
    	}
    
    	public static void main (String args[]) throws IOException {
    		
    		PipedOutputStream oStream = new PipedOututStream(iStream);
    
    		(new PipedIOSample()).start();
    
    		for (int i=0; i< args.length; i++) {
    			System.out.println("Scrivo: _" + args[i]);
    			oStream.write(args[i]);
    		
    		}
    		
    		oStream.close();
    	}
    }

    e unaltro:
    codice:
    import java.io.*;
    
    public class Read {
    
     _ _public static void main(String args[]) throws Exception {
     _ _ _ _byte[] b = {1, 2, 3, 4, 5};
     _ _ _ _PipedOutputStream poStream = new PipedOutputStream();
     _ _ _ _PipedInputStream piStream = new PipedInputStream();
    
     _ _ _ _//piped input stream connect to the piped output stream 
     _ _ _ _piStream.connect(poStream);
    
     _ _ _ _//Writes specified byte array.
     _ _ _ _poStream.write(b, 0, 5);
    
     _ _ _ _//Reads the next byte of data from this piped input stream.
     _ _ _ _for (int i = 0; i < b.length; i++) {
     _ _ _ _ _ _System.out.println(piStream.read());
     _ _ _ _}
    
     _ _ _ _// Closes piped input stream
     _ _ _ _poStream.close();
    
     _ _ _ _// Closes piped output stream
     _ _ _ _piStream.close();
     _ _}
    }
    adesso la domanda. perchè nel primo è stato utilizzato Data[Input][Output]Stream e nel secondo no?
    se si può saltare perchè non farlo?


    grazie per le risposte, non trovo l'utilità di queste classi se non strettamente necessarie

  2. #2
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Io non vedo né DataInputStream, né DataOutputStream... né nel primo, né nel secondo programma.

    A parte questo, scorrendo velocemente i due codici, mi pare di capire che uno intenda dimostrare l'uso dei Thread, mentre l'altro no... sinceramente non ho indagato sull'utilità o la bontà dei due codici, ma non trovando il DataInputStream o DataOutputStream non ho più capito la domanda.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  3. #3
    scusa un sacco... ho sbagliato a copiare.

    il primo codice è questo


    codice:
    import java.io.* ;
    public class PipedIOSample extends Thread {
    protected DataInputStream iStream ;
    120
    Capitolo 4. Input/Output
    public PipedIOSample(InputStream i) {
    this.iStream = new DataInputStream(i);
    }
    public void run() {
    try {
    String str;
    while (true) {
    str = iStream.readUTF();
    System.out.println("Letta: " + str);
    }
    }
    catch (IOException e) {
    e.printStackTrace();
    }
    }
    public static void main(String args[]) throws IOException {
    PipedOutputStream o = new PipedOutputStream();
    PipedInputStream iStream = new PipedInputStream(o);
    DataOutputStream oStream = new DataOutputStream(o);
    (new PipedIOSample(iStream)).start();
    for (int i = 0; i < args.length; i++) {
    System.out.println("Scrivo: " + args[i]);
    oStream.writeUTF(args[i]);
    }
    oStream.close();
    }
    }

    lo so non è indentato, colpa del copiaincolla.

    adesso puoi spiegarmelo?

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    Mah... credo che abbiano deciso di usare DataInputStream per avvalersi del metodo readUTF() che permette di leggere una sequenza di byte da uno stream ed ottenere già una stringa UTF.

    Usando solo PipedInputStream, non si beneficia di questo metodo e la stringa va costruita (tenendo conto di eventuali charset encoding).

    PS: credo che il codice del primo listato sia anche errato:

    codice:
    str = iStream.read([oStream]);
    Questa linea non compilerebbe.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  5. #5
    Ti ringrazio della risposta. Ancora grazie

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.