BufferedReader pour les grandes ByteBuffer?

Est-il un moyen de lire un ByteBuffer avec un BufferedReader sans avoir à le transformer en une Chaîne de caractères en premier? Je veux lire à travers une assez grande ByteBuffer que les lignes de texte et pour des raisons de performances, je veux éviter de les écrire sur le disque. Appeler toString sur le ByteBuffer ne fonctionne pas parce que la Chaîne résultante est trop grand (il jette java.lang.OutOfMemoryError: Java heap space). J'aurais pensé qu'il y aurait quelque chose dans l'API pour envelopper un ByteBuffer dans un lecteur, mais je n'arrive pas à trouver quelque chose de convenable.

Voici une présentation abrégée de code de l'échantillon de l'illustre ce que je fais):

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

OriginalL'auteur Rob | 2009-06-25