在Java 語言中
Java提供了兩個特殊的專門的類專門用於處理管道
Pipedinputstream代表了數據在管道中的輸出端
為了創建一個管道流
pipeout= new pipedyoutstream();
pipein= new pipedputsteam(pipepout);
一旦創建了一個管道後
應用程序由三個程序組成
主線程 (pipeapp
在main()方法中
由於程序中流操作都需要使用IOException異常處理
fileinputstream xfileln= new fileinputstream(
新的輸入流傳遞給changetoy()方法
inputstream ylnpipe =pipeapp
changetoy()方法創建將輸入數據
inputstream zlnpipe = pipeapp
changetoz()方法啟動將數據從
然後
datainputstream inputstream = new datainputstream(zlnpiepe);
創建了輸入流以後
String str= inputstream
While(str!=null)
{
system
}
顯示完成之後
inputstream
changetoy()方法
changetoy()方法首先通過傳遞一個參數inputstream給datainputstream對象來定位資源的輸入流
datainputstream xfileln =new datainutstream(inputstream)
然後
pipeoutstream pipeout = new pipeoutputstream();
pipeinputstream pipeln = new pipedinputsteam(pipeout);
為了能夠使用println()方法輸出修改的後的文本行到管道
printstream printstream = new printstream(pipeout);
現在
ythread ythread =new thread(xfileln
之後
changetoz()方法
changetoz()方法與changetoy()方法很相似
datainputstream yfileln= new datainputstream(inputstream);
程序創建一個新的管道
pipedoutstream pipeout
pipedinputstream pipeln
該線程通過這個新的管道發出修改後的數據(輸入流pipeln
源程序如下
//
//pipeapp
//
import Java
class pipeapp
{
public static void main(string[] args)
{
pipeapp pipeapp=new pipeapp();
try
{
fileinputstream xfile =new fileinputstream(
inputstream ylnpipe = pipeapp
inputstream zlnpipe=pipeapp
system
system
system
datainputstream inputstream = nes datainputstream(zlnpipe);
string str = inputstream
while (str!=null)
{
system
str=inputstream
}
inputstream
}
catch(exception e)
{
system
}
}
public inputstream changetoy(inputstream inputstream)
{
try
{
datainputstream pipeout = new datainputsteam(inputstream);
pipedoutstream pipeout = new pipedoutputstream();
pipedlnsteam pipeln = new pipedlnputstream(pipeout);
printstream printstream = new printstream(pipeout);
ythread ythread = new ythread(xfileln
ythread
return pipeln;
}
catch(exeption e)
{
system
}
return null;
}
public inputstream changetoz(inputstream inputsteam)
{
try
{
datainputstream yfileln = new datainputstream(inputstream);
pipeoutputstream pipeln
printrstream printstream
zthread zthread = new zthread(yfileln
zthread
return pipeln
}
catch(exception e)
{
system
}
return null;
}
}
Ythread類和Zthread類
由於ythread類與zthread類基本一樣
Ythread的構造器接收兩個參數
Ythread(datainputstream xfileln
{
this
this
}
線程通過run()方法來處理數據
string xstring = xfileln
每讀一行數據
string ystring = xstring
然後將修改後的數據輸出到管道的輸出端
prinstream
為了確保所有緩沖區的數據完全進入管道的輸出端
pringstram
循環完成後
pringstram
ythread類的源程序如下
//ythread
//
import Java
class ythread exteads thread
{
datainputstream xfileln;
pringstream printstream;
ythread(datainputstream xfileln
{
this
this
}
public void run()
{
try
{
string xstring = xfileln
while(xstring!=null)
{
string ystring= xstring
printstream
printstream
xstring= xfileln
}
printstream
}
catch{ioexception e}
{
system
}
}
}
pipeapp應用程序使用microsoft visual j++
From:http://tw.wingwit.com/Article/program/Java/gj/201311/27508.html