- 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 - BufferedInputStream read(byte[] b, int off, int len) method
Description
The Java BufferedInputStream read(byte[] b, int off, int len) method reads len bytes from byte-input stream into a byte array, starting at a given offset. This method repeatedly invokes the read() method of the underlying stream.
The iterated read continues until one of the follwing conditions becomes true −
len bytes read.
Returns -1, indicating end-of-file.
If the available() method of BufferedInputStream returns 0
Declaration
Following is the declaration for java.io.BufferedInputStream.read(byte[] b, int off, int len) method.
public int read(byte[] b, int off, int len)
Parameters
b − byte array to be populated.
off − starts storing from the offset.
len − number of bytes to read.
Return Value
This method does not return any value.
Exception
IOException − If an I/O error occurs.
Assumption
Assuming we have a text file example.txt, which has the following content. This file will be used as an input for our example programs −
ABCDE
Example - Using read() method
The following example shows the usage of Java BufferedInputStream read(byte[] b, int off, int len) method.
BufferedInputStreamDemo.java
package com.tutorialspoint;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.InputStream;
public class BufferedInputStreamDemo {
public static void main(String[] args) throws Exception {
InputStream inStream = null;
BufferedInputStream bis = null;
try {
// open input stream test.txt for reading purpose.
inStream = new FileInputStream("example.txt");
// input stream is converted to buffered input stream
bis = new BufferedInputStream(inStream);
// read number of bytes available
int numByte = bis.available();
// byte array declared
byte[] buf = new byte[numByte];
// read byte into buf , starts at offset 2, 3 bytes to read
bis.read(buf, 2, 3);
// for each byte in buf
for (byte b : buf) {
System.out.println((char)b+": " + b);
}
} catch(Exception e) {
e.printStackTrace();
} finally {
// releases any system resources associated with the stream
if(inStream!=null)
inStream.close();
if(bis!=null)
bis.close();
}
}
}
Output
Let us compile and run the above program, this will produce the following result −
: 0 : 0 A: 65 B: 66 C: 67
Example: Using read(byte[] b, int off, int len) to Read into a Buffer
The following example shows the usage of Java BufferedInputStream read(byte[] b, int off, int len) method.
BufferedInputStreamDemo.java
package com.tutorialspoint;
import java.io.BufferedInputStream;
import java.io.ByteArrayInputStream;
public class BufferedInputStreamDemo {
public static void main(String[] args) {
byte[] data = "BufferedInputStream read example".getBytes();
// open input stream on bytes for reading purpose.
try (BufferedInputStream bis = new BufferedInputStream(
new ByteArrayInputStream(data))) {
byte[] buffer = new byte[10]; // Buffer to hold chunks of data
int bytesRead;
System.out.println("Reading data into a buffer:");
while ((bytesRead = bis.read(buffer, 0, buffer.length)) != -1) {
// Convert bytes to string and print
System.out.print(new String(buffer, 0, bytesRead));
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
Output
Let us compile and run the above program, this will produce the following result −
Reading data into a buffer: BufferedInputStream read example
Explanation
Stream Source− A BufferedInputStream wraps a ByteArrayInputStream with byte array data.
-
Buffer Usage−
A byte array (buffer) of size 10 is created to read chunks of data.
The read(byte[] b, int off, int len) method reads up to 10 bytes at a time into the buffer starting at offset 0.
-
Behavior−
The read() method returns the number of bytes read or -1 if the end of the stream is reached.
The bytes are converted to a string and printed to the console.
Output− The data is printed in chunks of up to 10 bytes.
Summary
Use int read() for reading one byte at a time, which is simple but less efficient for large data.
Use int read(byte[] b, int off, int len) for reading chunks of data into a buffer, which is faster and more efficient for processing larger data streams.