
- Java.io - Home
- Java.io - BufferedInputStream
- Java.io - BufferedOutputStream
- Java.io - BufferedReader
- Java.io - BufferedWriter
- Java.io - ByteArrayInputStream
- Java.io - ByteArrayOutputStream
- Java.io - CharArrayReader
- Java.io - CharArrayWriter
- Java.io - Console
- Java.io - DataInputStream
- Java.io - DataOutputStream
- Java.io - File
- Java.io - FileDescriptor
- Java.io - FileInputStream
- Java.io - FileOutputStream
- Java.io - FilePermission
- Java.io - FileReader
- Java.io - FileWriter
- Java.io - FilterInputStream
- Java.io - FilterOutputStream
- Java.io - FilterReader
- Java.io - FilterWriter
- Java.io - InputStream
- Java.io - InputStreamReader
- Java.io - LineNumberInputStream
- Java.io - LineNumberReader
- Java.io - ObjectInputStream
- Java.io - ObjectInputStream.GetField
- Java.io - ObjectOutputStream
- io - ObjectOutputStream.PutField
- Java.io - ObjectStreamClass
- Java.io - ObjectStreamField
- Java.io - OutputStream
- Java.io - OutputStreamWriter
- Java.io - PipedInputStream
- Java.io - PipedOutputStream
- Java.io - PipedReader
- Java.io - PipedWriter
- Java.io - PrintStream
- Java.io - PrintWriter
- Java.io - PushbackInputStream
- Java.io - PushbackReader
- Java.io - RandomAccessFile
- Java.io - Reader
- Java.io - SequenceInputStream
- Java.io - SerializablePermission
- Java.io - StreamTokenizer
- Java.io - StringBufferInputStream
- Java.io - StringReader
- Java.io - StringWriter
- Java.io - Writer
- Java.io package Useful Resources
- Java.io - Discussion
Java - PushbackInputStream unread(byte[] b,int off,int len) method
Description
The Java PushbackInputStream unread(byte[] b,int off,int len) method pushes back a portion of an array of bytes by copying it to the front of the pushback buffer. After this method returns, the next byte to be read will have the value b[off], the byte after that will have the value b[off+1], and so forth.
unread(byte[] b,int off,int len) method −
Pushes back len bytes from the byte array b, starting at offset off.
These bytes will be returned before any unread bytes still in the stream.
Useful for partial backtracking in parsing situations.
Declaration
Following is the declaration for java.io.PushbackInputStream.unread(byte[] b,int off,int len) method.
public void unread(byte[] b,int off,int len)
Parameters
b − The byte array to push back.
off − The start offset of the data.
len − The number of bytes to push back.
Return Value
This method does not return a value.
Exception
IOException − If there is not enough room in the pushback buffer for the specified number of bytes, or this input stream has been closed by invoking its close() method.
Example - Usage of PushbackInputStream unread(byte[] b,int off,int len) method
The following example shows the usage of PushbackInputStream unread(byte[] b,int off,int len) method.
PushbackInputStreamDemo.java
package com.tutorialspoint; import java.io.ByteArrayInputStream; import java.io.InputStream; import java.io.PushbackInputStream; public class PushbackInputStreamDemo { public static void main(String[] args) { // declare a buffer and initialize its size: byte[] arrByte = new byte[1024]; // create an array for our message byte[] byteArray = new byte[]{'H', 'e', 'l', 'l', 'o',}; // create object of PushbackInputStream class for specified stream InputStream is = new ByteArrayInputStream(byteArray); PushbackInputStream pis = new PushbackInputStream(is, 10); try { // read from the buffer one character at a time for (int i = 0; i < byteArray.length; i++) { // read a char into our array arrByte[i] = (byte) pis.read(); // display the read byte System.out.print((char) arrByte[i]); } // change line System.out.println(); // create a new byte array to be unread byte[] b = {'W', 'o', 'r', 'l', 'd'}; // unread the byte array pis.unread(b, 2, 3); // read again from the buffer one character at a time for (int i = 0; i < 3; i++) { // read a char into our array arrByte[i] = (byte) pis.read(); // display the read byte System.out.print((char) arrByte[i]); } } catch (Exception ex) { ex.printStackTrace(); } } }
Output
Let us compile and run the above program, this will produce the following result −
Hello rld
Example - Unread a portion of a buffer
The following example shows the usage of PushbackInputStream markSupported() method.
PushbackInputStreamDemo.java
package com.tutorialspoint; import java.io.ByteArrayInputStream; import java.io.PushbackInputStream; import java.io.IOException; public class PushbackInputStreamDemo { public static void main(String[] args) throws IOException { byte[] data = "ABCDEFG".getBytes(); // 7 bytes try (PushbackInputStream pbis = new PushbackInputStream(new ByteArrayInputStream(data), 10)) { byte[] buffer = new byte[4]; pbis.read(buffer); // Read A B C D System.out.println("Initial read: " + new String(buffer)); // Output: ABCD // Push back just 'C' and 'D' from buffer (offset 2, length 2) pbis.unread(buffer, 2, 2); // Now reading again should return C, D, then E byte[] nextRead = new byte[3]; pbis.read(nextRead); System.out.println("After unread: " + new String(nextRead)); // Output: CDE } } }
Output
Let us compile and run the above program, this will produce the following result−
Initial read: ABCD After unread: CDE
Explanation
Reads the first 4 bytes (ABCD) into a buffer.
Pushes back only 'C' and 'D' using unread(buffer, 2, 2).
Next read() fetches CD (pushed back) and the next byte from the stream (E).
Example - Look ahead, then unread a partial header
The following example shows the usage of PushbackInputStream unread(byte[] b,int off,int len) method.
PushbackInputStreamDemo.java
package com.tutorialspoint; import java.io.ByteArrayInputStream; import java.io.PushbackInputStream; import java.io.IOException; public class PushbackInputStreamDemo { public static void main(String[] args) throws IOException { byte[] data = "TYPE:DataPayload".getBytes(); try (PushbackInputStream pbis = new PushbackInputStream(new ByteArrayInputStream(data), 20)) { byte[] header = new byte[5]; pbis.read(header); // Read T Y P E : // Check the header String head = new String(header); System.out.println("Header: " + head); // Output: TYPE: // Push back only last 3 chars (P E :) pbis.unread(header, 2, 3); // Now read again from pushed-back section byte[] reread = new byte[5]; pbis.read(reread); System.out.println("Re-read: " + new String(reread)); // Output: PE:Da } } }
Output
Let us compile and run the above program, this will produce the following result−
Header: TYPE: Re-read: PE:Da
Explanation
Reads TYPE: (5 bytes), simulating header processing.
Pushes back 'P', 'E', ':' (bytes 2 to 4 of the header).
The next read starts with PE: and continues into the next part of the stream.