Kobza in IO zapewnia połączenie między dwoma wątkami działającymi jednocześnie w JVM. Zatem rury są używane zarówno jako źródło, jak i miejsce docelowe.
PipedInputStream jest również przesyłany za pomocą PipedOutputStream. Zatem dane można zapisywać przy użyciu PipedOutputStream i można je zapisywać przy użyciu PipedInputStream. Jednak jednoczesne użycie obu wątków spowoduje zakleszczenie wątków.
Mówi się, że potok jest uszkodzony, jeśli wątek dostarczający bajty danych do połączonego potokiem strumienia wyjściowego już nie działa.
Deklaracja:
public class PipedInputStream extends InputStream
Konstruktor:
PipedInputStream() :
tworzy PipedInputStream, który nie jest podłączony.
PipedInputStream(int pSize):
tworzy PipedInputStream, który nie jest połączony z określonym rozmiarem rury.
PipedInputStream(PipedOutputStream outStream):
tworzy PipedInputStream, który jest podłączony do PipedOutputStream - „outStream”.
PipedInputStream(PipedOutputStream outStream int pSize):
tworzy potokowy strumień wejściowy, który jest podłączony do potokowego strumienia wyjściowego o określonym rozmiarze rury. Metody:
int czytaj():
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();}}}
Wyjście :
using read() : G using read() : E using read() : K
read(bajt[] bufor int przesunięcie int maxlen):
java.io.PipedInputStream.read(bajt[] bufor int przesunięcie int maxlen) odczytuje maksymalnie długość bajtów danych z potokowego strumienia wejściowego do tablicy buforów. Metoda blokuje się, jeśli osiągnięty zostanie koniec strumienia lub zostanie zgłoszony wyjątek. Składnia:
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.
otrzymaj (int bajt):
java.io.PipedInputStream.receive (int bajt) otrzymuje bajt danych. Jeżeli nie ma dostępnych danych wejściowych, metoda blokuje się. Składnia:
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.
zamknąć() :
java.io.PipedInputStream.close() zamyka potokowy strumień wejściowy i zwalnia przydzielone zasoby. Składnia:
public void close() Parameters : -------------- Return : void Exception : -> IOException : if in case IO error occurs.
connect(źródło PipedOutputStream):
java.io.PipedInputStream.connect(źródło PipedOutputStream) łączy potokowy strumień wejściowy ze „źródłowym” potokowym strumieniem wyjściowym i w przypadku, gdy „źródło” to potoki z innym strumieniem, zgłaszany jest wyjątek IO Składnia:
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.
dostępny() :
java.io.PipedInputStream.available() zwraca nr. bajtów, które można odczytać ze strumienia wejściowego bez faktycznego blokowania. Składnia:
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.
Program Java wyjaśniający działanie metod klasy 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();}}}
Wyjście:
Use of available() : 5 Using read(buffer offset maxlen) : GEEKS Closing the stream
Next Article: Klasa Java.io.PipedOutputStream w Javie Utwórz quiz