¿BufferedReader para ByteBuffer grande?

¿Hay una manera de leer un ByteBuffer con un BufferedReader sin tener que convertirlo primero en una cadena? Quiero leer un ByteBuffer bastante grande como líneas de texto y, por razones de rendimiento, quiero evitar escribirlo en el disco. Llamar aString en el ByteBuffer no funciona porque el String resultante es demasiado grande (lanza java.lang.OutOfMemoryError: espacio de almacenamiento dinámico de Java). Habría pensado que habría algo en la API para envolver un ByteBuffer en un lector adecuado, pero parece que no puedo encontrar nada adecuado.

Aquí hay un ejemplo de código abreviado que ilustra lo que estoy haciendo):

<code>// input stream is from Process getInputStream()
public String read(InputStream istream)
{
  ReadableByteChannel source = Channels.newChannel(istream);
  ByteArrayOutputStream ostream = new ByteArrayOutputStream(bufferSize);
  WritableByteChannel destination = Channels.newChannel(ostream);
  ByteBuffer buffer = ByteBuffer.allocateDirect(writeBufferSize);

  while (source.read(buffer) != -1)
  {
    buffer.flip();
    while (buffer.hasRemaining())
    {
      destination.write(buffer);
    }
    buffer.clear();
  }

  // this data can be up to 150 MB.. won't fit in a String.
  result = ostream.toString();
  source.close();
  destination.close();
  return result;
}

// after the process is run, we call this method with the String
public void readLines(String text)
{
  BufferedReader reader = new BufferedReader(new StringReader(text));
  String line;

  while ((line = reader.readLine()) != null)
  {
    // do stuff with line
  }
}
</code>

Respuestas a la pregunta(3)

Su respuesta a la pregunta