Byte [] y java.lang.OutOfMemoryError leyendo el archivo por bits

Estoy tratando de escribir un lector que lea archivos por bits pero tengo un problema con los archivos grandes. Traté de leer el archivo con 100 mb y me llevó más de 3 minutos, pero funcionó.

Sin embargo, luego probé el archivo con 500 mb pero ni siquiera comenzó. Debido a esta línea:

byte[] fileBits = new byte[len];

Ahora estoy buscando soluciones y no puedo encontrar ninguna. Tal vez alguien lo resolvió y podría compartir algún código, consejos o idea.

if (file.length() > Integer.MAX_VALUE) {
    throw new IllegalArgumentException("File is too large: " + file.length());
}

int len = (int) file.length();
FileInputStream inputStream = new FileInputStream(file);

try {
    byte[] fileBits = new byte[len];
    for (int pos = 0; pos < len;) {
        int n = inputStream.read(fileBits, pos, len - pos);
        if (n < 0) {
            throw new EOFException();
        }
        pos += n;
    }

inputStream.read(fileBits, 0, inputStream.available());
inputStream.close();

Respuestas a la pregunta(8)

Su respuesta a la pregunta