Rør i IO giver et link mellem to tråde, der kører i JVM på samme tid. Så rør bruges både som kilde eller destination.
- PipedInputStream er også forbundet med PipedOutputStream. Så data kan skrives ved hjælp af PipedOutputStream og kan skrives ved hjælp af PipedInputStream. Men at bruge begge tråde på samme tid vil skabe en dødvande for trådene.
- Et rør siges at være brudt, hvis en tråd, der leverede databytes til den tilsluttede rørudgangsstrøm, ikke længere er i live.
Erklæring: public class PipedInputStream extends InputStream
Konstruktør: | PipedInputStream() : | opretter en PipedInputStream, som den ikke er tilsluttet.
| PipedInputStream(int pSize): | opretter en PipedInputStream, som den ikke er forbundet med specificeret rørstørrelse.
| PipedInputStream(PipedOutputStream OutStream): | opretter en PipedInputStream, som den er forbundet til PipedOutputStream - 'outStream'.
| PipedInputStream(PipedOutputStream outStream int pSize): | opretter en Piped Input Stream, der er forbundet til Piped Output Stream med den angivne rørstørrelse. Metoder: | 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() method import java.io.* ; public class NewClass { public static void main ( String [] args ) throws IOException { PipedInputStream geek_input = new PipedInputStream (); PipedOutputStream geek_output = new PipedOutputStream (); try { // Use of connect() : connecting geek_input with geek_output geek_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 ( IOException except ) { except . printStackTrace (); } } } Output: 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) læser op til maxlen bytes af data fra Piped Input Stream til rækken af buffere. Metoden blokerer, hvis slutningen af Stream nås, eller en undtagelse kastes. Syntaks: 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.
| modtage(int byte): | java.io.PipedInputStream.receive(int byte) modtager byte af data. Hvis ingen input er tilgængelig, blokerer metoden. Syntaks: 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.
| luk(): | java.io.PipedInputStream.close() lukker Piped Input Stream og frigiver de allokerede ressourcer. Syntaks: public void close() Parameters : -------------- Return : void Exception : -> IOException : if in case IO error occurs.
| connect(PipedOutputStream-kilde): | java.io.PipedInputStream.connect(PipedOutputStream-kilde) forbinder Piped Input Stream til 'source' Piped Output Stream og i tilfælde af at 'source' er rør med en anden stream IO-undtagelse kastes Syntaks: 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.
| tilgængelig() : | java.io.PipedInputStream.available() returnerer nr. af bytes, der kan læses fra Input Stream uden egentlig at blive blokeret. Syntaks: 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.
Java-program, der forklarer, hvordan PipedInputStream-klassens metoder fungerer: Java // Java program illustrating the working of PipedInputStream // connect() read(byte[] buffer int offset int maxlen) // close() available() import java.io.* ; public class NewClass { public static void main ( String [] args ) throws IOException { PipedInputStream geek_input = new PipedInputStream (); PipedOutputStream geek_output = new PipedOutputStream (); try { // Use of connect() : connecting geek_input with geek_output geek_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 = new byte [ 5 ] ; // destination 'buffer' geek_input . read ( buffer 0 5 ); String str = new String ( buffer ); System . out . println ( 'Using read(buffer offset maxlen) : ' + str ); // USe of close() method : System . out . println ( 'Closing the stream' ); geek_input . close (); } catch ( IOException except ) { except . printStackTrace (); } } } Produktion: Use of available() : 5 Using read(buffer offset maxlen) : GEEKS Closing the stream
Next Article: Java.io.PipedOutputStream klasse i Java Opret Quiz