Tubs a IO proporciona un enllaç entre dos fils que s'executen a JVM alhora. Així, les canonades s'utilitzen tant com a font com a destinació.
PipedInputStream també es connecta amb PipedOutputStream. Per tant, les dades es poden escriure amb PipedOutputStream i es poden escriure amb PipedInputStream. Però utilitzar els dos fils alhora crearà un bloqueig per als fils.
Es diu que una canonada està trencada si un fil que proporcionava bytes de dades al flux de sortida canalitzat connectat ja no està viu.
Declaració:
public class PipedInputStream extends InputStream
Constructor:
PipedInputStream():
crea un PipedInputStream que no està connectat.
PipedInputStream(int pSize):
crea un PipedInputStream que no està connectat amb la mida de canonada especificada.
PipedInputStream(PipedOutputStream outStream):
crea un PipedInputStream que està connectat a PipedOutputStream - 'outStream'.
PipedInputStream(PipedOutputStream outStream int pSize):
crea un corrent d'entrada canalitzat que està connectat al flux de sortida canalitzat amb la mida de canonada especificada. Mètodes:
int read():
Reads the next byte of data from this piped input stream.The value byte is returned as an int in the range 0 to 255. This method blocks until input data is available the end of the stream is detected or an exception is thrown. Java
// Java program illustrating the working of read() methodimportjava.io.*;publicclassNewClass{publicstaticvoidmain(String[]args)throwsIOException{PipedInputStreamgeek_input=newPipedInputStream();PipedOutputStreamgeek_output=newPipedOutputStream();try{// Use of connect() : connecting geek_input with geek_outputgeek_input.connect(geek_output);// Use of read() method :geek_output.write(71);System.out.println('using read() : '+(char)geek_input.read());geek_output.write(69);System.out.println('using read() : '+(char)geek_input.read());geek_output.write(75);System.out.println('using read() : '+(char)geek_input.read());}catch(IOExceptionexcept){except.printStackTrace();}}}
Sortida:
using read() : G using read() : E using read() : K
read(byte[] buffer int offset int maxlen):
java.io.PipedInputStream.read(byte[] buffer int offset int maxlen) llegeix fins a un màxim de bytes de dades des del flux d'entrada canalitzat a la matriu de buffers. El mètode bloqueja si s'arriba al final del flux o es llança una excepció. Sintaxi:
public int read(byte[] buffer int offset int maxlen) Parameters : buffer : the destination buffer into which the data is to be read offset : starting in the destination array - 'buffer'. maxlen : maximum length of array to be read Return : next 'maxlen' bytes of the data as an integer value return -1 is end of stream is reached Exception : -> IOException : if in case IO error occurs. -> NullPointerException : if buffer is null. -> IndexOutOfBoundsException : if offset is -ve or maxlen is -ve or maxlen > buffer.length - offset.
rebre(int byte):
java.io.PipedInputStream.receive(int byte) rep el byte de les dades. Si no hi ha cap entrada disponible, el mètode es bloqueja. Sintaxi:
protected void receive(int byte) Parameters : byte : the bytes of the data received Return : void Exception : -> IOException : if in case IO error occurs or pipe is broken.
tancar():
java.io.PipedInputStream.close() tanca el flux d'entrada canalitzat i allibera els recursos assignats. Sintaxi:
public void close() Parameters : -------------- Return : void Exception : -> IOException : if in case IO error occurs.
connectar (font PipedOutputStream):
java.io.PipedInputStream.connect(font de PipedOutputStream) connecta la seqüència d'entrada canalitzada a la seqüència de sortida canalitzada "font" i en cas que la "font" sigui canalitzada amb una altra excepció d'IO de corrent. Sintaxi:
public void connect(PipedOutputStream source) Parameters : source : the Piped Output Stream to be connected to Return : void Exception : -> IOException : if in case IO error occurs.
disponible ():
java.io.PipedInputStream.available() torna no. de bytes que es poden llegir des del flux d'entrada sense bloquejar-los. Sintaxi:
public int available() Parameters : ------------- Return : no. of bytes that can be read from Input Stream without actually being blocked. 0 if the stream is already closed but by invoking close() method Exception : -> IOException : if in case IO error occurs.
Programa Java que explica el funcionament dels mètodes de classe PipedInputStream: Java
// Java program illustrating the working of PipedInputStream// connect() read(byte[] buffer int offset int maxlen)// close() available()importjava.io.*;publicclassNewClass{publicstaticvoidmain(String[]args)throwsIOException{PipedInputStreamgeek_input=newPipedInputStream();PipedOutputStreamgeek_output=newPipedOutputStream();try{// Use of connect() : connecting geek_input with geek_outputgeek_input.connect(geek_output);geek_output.write(71);geek_output.write(69);geek_output.write(69);geek_output.write(75);geek_output.write(83);// Use of available() :System.out.println('Use of available() : '+geek_input.available());// Use of read(byte[] buffer int offset int maxlen) :byte[]buffer=newbyte[5];// destination 'buffer'geek_input.read(buffer05);Stringstr=newString(buffer);System.out.println('Using read(buffer offset maxlen) : '+str);// USe of close() method :System.out.println('Closing the stream');geek_input.close();}catch(IOExceptionexcept){except.printStackTrace();}}}
Sortida:
Use of available() : 5 Using read(buffer offset maxlen) : GEEKS Closing the stream