BufferedReader für großen ByteBuffer?

Gibt es eine Möglichkeit, einen ByteBuffer mit einem BufferedReader zu lesen, ohne ihn zuerst in einen String verwandeln zu müssen? Ich möchte einen ziemlich großen ByteBuffer als Textzeilen lesen und aus Performancegründen vermeiden, ihn auf die Festplatte zu schreiben. Das Aufrufen von toString im ByteBuffer funktioniert nicht, da der resultierende String zu groß ist (es wird java.lang.OutOfMemoryError: Java-Heapspeicher ausgelöst). Ich hätte gedacht, dass es etwas in der API geben würde, um einen ByteBuffer in einen geeigneten Reader zu packen, aber ich kann anscheinend nichts Passendes finden.

Hier ist ein abgekürztes Codebeispiel, das veranschaulicht, was ich tue:

<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>

Antworten auf die Frage(3)

Ihre Antwort auf die Frage