Pipe Streams

Revised: Mar./10th/2002

$BB?$/$N8@8l$G%Q%$%W$H8@$&;EAH$_$,Ds6!$5$l$F$$$^$9!#$=$l$i$O0lHL$K!"$"$k%W%m%;%9$N=PNO$rJL$N%W%m%;%9$NF~NO$K7R$2$k$3$H$G$9!#(B

$BNc$($P(B UNIX $B7O(B OS $B$G$O!"%3%^%s%I(B "cat /etc/passwd | wc -l" $B$H$9$k$3$H$G!"(B "cat /etc/passwd" $B$N=PNO$r(B "wc -l" $B$NF~NO$KM?$($k$3$H$,=PMh$^$9!#(B Java $B$G$O!"J8;z%9%H%j!<%`$N%Q%$%W$H%P%$%H%9%H%j!<%`$N%Q%$%W$,MQ0U$5$l$F$$$^$9!#(B

$BJ8;z%9%H%j!<%`(B PipedReader
PipedWriter
$B%P%$%H%9%H%j!<%`(B PipedInputStream
PipedOutputStream

$BNc$($P!"%a%=%C%I$NCf$G

PipedWriter pipeOut = new PipedWriter();
PipedReader pipeIn = new PipedReader(pipeOut);

$B$3$NNc$G$O!"(B pipeOut $B$+$ipipeIn $B$+$i

pipeOut $B$r$3$N%a%=%C%IFb$G=hM}$7$FLa$jCM$K(B pipeIn $B$r;XDj$9$l$P!"$3$N%a%=%C%I$N=hM}7k2L$r=q$-9~$`%9%H%j!<%`$r!"FI$_9~$_$N%9%H%j!<%`$K%Q%$%W$rDL$7$F7R$2$i$l$k$o$1$G$9!#(B

$BNc$($P!"$3$l$KB3$$$F

// $B%U%!%$%k$N%$%s%9%?%s%92=(B
FileReader source = new FileReader("words.txt");
// $BFI$_9~$_%P%C%U%!$G%i%C%W(B
BufferedReader in = new BufferedReader(source);

// $B=q$-9~$_$N%Q%$%W$r(B PrintWriter $B$G%i%C%W(B
PrintWriter out = new PrintWriter(pipeOut);
// $BFI$_9~$_%P%C%U%!$+$iFI$_9~$s$G=q$-9~$_(B
String line;
while ((line = in.readLine()) != null) {
	out.println(line);
	out.flush();
}
out.close();

$B$3$N%W%m%;%9$G(B out $B$K=q$-9~$^$l$?%b%N$O%Q%$%W%9%H%j!<%`(B PipeOut $B$KEO$5$l!"%Q%$%W$rDL$C$F(B pipeIn $B$+$iFI$_9~$`$3$H$,=PMh$^$9!#=>$C$F!"$3$N%a%=%C%I$G(B return pipeIn; $B$H$9$l$P!"

$B$3$N%W%m%;%9$rReader pipe(Reader source) $B$H$7$FDj5A$9$l$P!"0z?t(B source $B$GpipeOut $B$K=q$-9~$s$G!"$=$l$r(B pipeOut $B$K=PNO$7$FJV$9$3$H$,2DG=$G$9!#(B

$B%5%s%W%k(B

$B

PipeTest.java:

import java.io.*;
import java.util.*;

class PipeTest {
	public static void main(String[] args) throws IOException {
		// $B%U%!%$%k$N%$%s%9%?%s%92=(B
		FileReader text = new FileReader(args[0]);

		// $B%Q%$%W$rMxMQ$7$?J#?t$N=hM}(B
		Reader nlText = nl(tac(nl(text)));

		// $BI8=`=PNO(B
		BufferedReader in = new BufferedReader(nlText);
		String line;
		while ((line = in.readLine()) != null) {
			System.out.println(line);
		}
		in.close();
	}

	// $B%Q%$%W$rMxMQ$7$?=hM}!'9THV9fIU2C(B
	static Reader nl(Reader source) throws IOException {
		BufferedReader in = new BufferedReader(source);

		// $BFI$_9~$_$H=q$-9~$_$N%Q%$%W$r$D$J$2$k(B
		PipedWriter pipeOut = new PipedWriter();
		PipedReader pipeIn = new PipedReader(pipeOut);
		PrintWriter out = new PrintWriter(pipeOut);

		// out $B$K=hM}(B
		String line;
		int i=0;
		while ((line = in.readLine()) != null) {
			out.println(++i + ": " + line);
			out.flush();
		}
		out.close();

		// $BFI$_9~$_%Q%$%W$rJV$9(B
		return pipeIn;
	}

	// $B%Q%$%W$rMxMQ$7$?=hM}!'5U=g$KJB$YBX$((B
	static Reader tac(Reader source) throws IOException {
		BufferedReader in = new BufferedReader(source);

		// $BFI$_9~$_$H=q$-9~$_$N%Q%$%W$r$D$J$2$k(B
		PipedWriter pipeOut = new PipedWriter();
		PipedReader pipeIn = new PipedReader(pipeOut);
		PrintWriter out = new PrintWriter(pipeOut);

		// out $B$K=hM}(B
		Stack rtext = new Stack();
		String line;
		int i=0;
		while ((line = in.readLine()) != null) {
			rtext.push(line);
		}
		while (!rtext.empty()) {
			out.println(rtext.pop());
			out.flush();
		}
		out.close();

		// $BFI$_9~$_%Q%$%W$rJV$9(B
		return pipeIn;
	}
}

$Btest.txt $B$,B8:_$7$?>l9g$N

test.txt:

$B$3$s$K$A$O(B
Hello World.

$B$5$h$&$J$i(B
Bye World.

$B%3%^%s%I%i%$%s!'(B

C:\IO>javac PipeTest.java

C:\IO>java PipeTest test.txt
1: 5: Bye World.
2: 4: $B$5$h$&$J$i(B
3: 3:
4: 2: Hello World.
5: 1: $B$3$s$K$A$O(B

C:\IO>


Copyright © 2002 SUGAI, Manabu. All Rights Reserved.
SEO [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送