Question
How can I read data directly from a BufferedReader into a byte array in Java?
BufferedReader reader = new BufferedReader(new FileReader("file.txt"));
char[] buffer = new char[1024];
int bytesRead = reader.read(buffer);
byte[] byteArray = new byte[bytesRead];
for (int i = 0; i < bytesRead; i++) {
byteArray[i] = (byte) buffer[i];
}
reader.close();
Answer
Reading data from a BufferedReader into a byte array requires converting characters into bytes, as BufferedReader is designed for character streams. This overview provides a detailed approach to achieve this effectively in Java.
// Example of reading from BufferedReader into byte array
import java.io.*;
public class BufferedReaderToByteArray {
public static void main(String[] args) throws IOException {
BufferedReader reader = new BufferedReader(new FileReader("file.txt"));
char[] buffer = new char[1024];
int bytesRead = reader.read(buffer);
byte[] byteArray = new byte[bytesRead];
for (int i = 0; i < bytesRead; i++) {
byteArray[i] = (byte) buffer[i];
}
reader.close();
// Output byte array
System.out.println(Arrays.toString(byteArray));
}
}
Causes
- BufferedReader reads text data, not raw byte data.
- bytes and characters are represented differently in Java.
Solutions
- Use the read() method of BufferedReader to read characters into a char array.
- Convert the char array into a byte array manually.
Common Mistakes
Mistake: Reading directly into a byte array from BufferedReader without conversion.
Solution: Always read into a char array first, then convert to a byte array.
Mistake: Failing to close the BufferedReader after use.
Solution: Use a try-with-resources statement to automatically close the BufferedReader.
Helpers
- BufferedReader
- byte array
- Java I/O
- read BufferedReader byte[]
- BufferedReader example
- Java read character stream