ByteArrayInputStream allows an application to read data from a byte array as if it were an input stream. It is especially useful for simulating input for testing or for reading memory-stored data byte-by-byte.
Commonly Used Constructors and Methods


Simple Program – Reading from ByteArrayInputStream
LotusJavaPrince wants to read a byte array "Hello, Mahesh" using ByteArrayInputStream and print each character.
import java.io.ByteArrayInputStream;
import java.io.IOException;
public class SimpleByteArrayInputStream {
public static void main(String[] args) {
byte[] data = "Hello, Mahesh".getBytes();
try (ByteArrayInputStream bais = new ByteArrayInputStream(data)) {
int b;
while ((b = bais.read()) != -1) {
System.out.print((char) b);
}
} catch (IOException e) {
e.printStackTrace();
}
}
}Output:
Hello, Mahesh
ByteArrayInputStream in Validation System
Problem Statement:
LotusJavaPrince is building a system to parse CSV records stored in memory and validate user data like email and age. Instead of reading from a file, he uses ByteArrayInputStream to simulate file-like reading from a byte array.
import java.io.ByteArrayInputStream;
import java.io.BufferedReader;
import java.io.InputStreamReader;
public class UserValidator {
public static void main(String[] args) {
String csvData = "name,email,age\n" +
"LotusJavaPrince,lotus@java.io,30\n" +
"Mahesh,mahesh@invalid,17\n" +
"Tester,test@example.com,25\n";
byte[] byteData = csvData.getBytes();
try (ByteArrayInputStream bais = new ByteArrayInputStream(byteData);
BufferedReader reader = new BufferedReader(new InputStreamReader(bais))) {
String line;
boolean isFirstLine = true;
while ((line = reader.readLine()) != null) {
if (isFirstLine) {
isFirstLine = false;
continue; // skip header
}
String[] fields = line.split(",");
String name = fields[0];
String email = fields[1];
int age = Integer.parseInt(fields[2]);
boolean validEmail = email.contains("@") && email.contains(".");
boolean validAge = age >= 18;
System.out.println("User: " + name);
System.out.println("Email Valid: " + validEmail);
System.out.println("Age Valid: " + validAge);
System.out.println("---");
}
} catch (Exception e) {
e.printStackTrace();
}
}
}Output:
User: LotusJavaPrince
Email Valid: true
Age Valid: true
---
User: Mahesh
Email Valid: false
Age Valid: false
---
User: Tester
Email Valid: true
Age Valid: true
---Code language: JavaScript (javascript)
ByteArrayInputStream is a memory-based input stream for byte arrays.
- Great for unit testing or converting data held in memory into stream-like format.
- Supports all basic stream operations:
read(),available(),reset(), etc. - It is self-contained and does not require external files or resources.
