BufferedReader dla dużego ByteBuffera?
Czy istnieje sposób na odczyt ByteBuffera za pomocą BufferedReader bez konieczności zamieniania go najpierw w String? Chcę czytać dość duży ByteBuffer jako linie tekstu i ze względu na wydajność chcę uniknąć zapisywania go na dysku. Wywołanie toString w ByteBuffer nie działa, ponieważ wynikowy ciąg znaków jest zbyt duży (zgłasza java.lang.OutOfMemoryError: przestrzeń sterty Java). Pomyślałbym, że w interfejsie API znajdzie się coś, co mogłoby owinąć ByteBuffera w odpowiednim czytniku, ale nie mogę znaleźć niczego odpowiedniego.
Oto przykład skróconego kodu ilustrujący to, co robię):
<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>