- 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 read(byte[] b,int off,int len) method
Description
The Java PushbackInputStream read(byte[] b,int off,int len) method reads up to len bytes of data from this input stream into an array of bytes. This method first reads any pushed-back bytes; after that, if fewer than len bytes have been read then it reads from the underlying input stream. If len is not zero, the method blocks until at least 1 byte of input is available; otherwise, no bytes are read and 0 is returned.
read(byte[] b,int off,int len) method −
Reads up to len bytes of data from the input stream into an array b, starting at offset off.
Returns the number of bytes read, or -1 if the end of the stream is reached.
Commonly used when you want to fill part of a buffer, not necessarily from the start.
Declaration
Following is the declaration for java.io.PushbackInputStream.read(byte[] b,int off,int len) method.
public int read(byte[] b,int off,int len)
Parameters
b − The buffer into which the data is read.
off − The start offset in the destination array b.
len − The maximum number of bytes read.
Return Value
This method returns the total number of bytes read into the buffer, or -1 if there is no more data because the end of the stream has been reached.
Exception
NullPointerException − If b is null.
IndexOutOfBoundsException − If off is negative, len is negative, or len is greater than b.length - off.
IOException − If this input stream has been closed by invoking its close() method, or an I/O error occurs.
Example - Usage of PushbackInputStream read(byte[] b,int off,int len) method
The following example shows the usage of PushbackInputStream read(byte[] b,int off,int len) method.
PushbackInputStreamDemo.java
package com.tutorialspoint;
import java.io.*;
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);
try {
// read a char into our array
pis.read(arrByte, 0, 3);
// print arrByte
for (int i = 0; i < 3; i++) {
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 −
Hel
Example - Read into middle 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 = "HELLO".getBytes(); // Source stream
try (PushbackInputStream pbis = new PushbackInputStream(new ByteArrayInputStream(data))) {
byte[] buffer = new byte[10]; // Larger buffer than needed
// Read 3 bytes into buffer starting at offset 2
int bytesRead = pbis.read(buffer, 2, 3);
System.out.println("Bytes read: " + bytesRead); // Output: 3
System.out.println("Buffer content: " + new String(buffer)); // Output shows nulls + 'HEL'
}
}
}
Output
Let us compile and run the above program, this will produce the following result−
Bytes read: 3 Buffer content: HEL
Explanation
Only 3 bytes are read (H, E, L).
They're placed in buffer[2], buffer[3], and buffer[4].
The rest of the buffer contains default zero values.
Example - Combine unread and read with offset
The following example shows the usage of PushbackInputStream read(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 = "JAVAIO".getBytes();
try (PushbackInputStream pbis = new PushbackInputStream(new ByteArrayInputStream(data), 10)) {
byte[] buffer = new byte[6];
// Read first 4 bytes
pbis.read(buffer, 0, 4); // J A V A
System.out.println("First read: " + new String(buffer, 0, 4)); // Output: JAVA
// Unread last 2 bytes (V and A)
pbis.unread(buffer, 2, 2);
// Read next 3 bytes into buffer starting at index 3
pbis.read(buffer, 3, 3); // V A I
System.out.println("Final buffer: " + new String(buffer)); // Output: JAVAI_
}
}
}
Output
Let us compile and run the above program, this will produce the following result−
First read: JAVA Final buffer: JAVVAI
Explanation
First read: JAVA.
Unread 'V' and 'A'.
Read 3 more bytes into the middle of the buffer (buffer[3], buffer[4], buffer[5]): VAI.