Piped proudy jsou mechanismy v Jave k nastaveni proudu dat mezi 2 vlakna. Pipes proudy maji dvojice proudu – vstupni a vystupni. Data zapisovana do vystupniho proudu by se meli projevit na vstupnim proudu na jinem konci roury. Muzes na Pipe proudy pohlizet jako Buffer, s pripojenim na kazdem konci.
Ukazeme si jednoduchou praci s Piped proudy. Ukazka se sklada ze dvou trid: MyThread (Druhe vlakno nutne k Pipe) a PipeDemo1 (Ukazka pipe proudu)
T MyThread si ve svem K ulozi odkaz na OT Writer, ktery je odvozen od tridy Stream. To je zakladni vec, kterou musite mit na pameti.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
class MyThread extends Thread { private Writer out; public MyThread(Writer out) { this.out = out; } public void run() { //-Zapis na zacatek pipe. try { BufferedWriter bw = new BufferedWriter(out); bw.write( & quot; testing & quot;); bw.newLine(); bw.close(); } catch (IOException e) { System.err.println(e); } } } |
Pro praci s Piped proudy musime vytvorit obe konce roury – zde takto figuruji OT PipedWriter a PipedReader. K jejich propojeni staci do jedne v K ulozit odkaz na druhou. Neukladejte tento odkaz do obou, ne ze by to bylo technicky nemozne v teorii, ale v praxi jiz ano. Pro cteni si vytvorim O BufferedReader, ktery mi precte posluchace – readera roury.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
public class PipeDemo1 { public static void main(String args[]) throws IOException { //-Vytvoreni "roury" pipe PipedWriter writer = new PipedWriter(); PipedReader reader = new PipedReader(writer); //-Pres vlakno zapis do pipe new MyThread(writer).start(); //-Cteni z konce pipe. BufferedReader br = new BufferedReader(reader); String str = br.readLine(); br.close(); System.out.println(str); } } |