BufferedReader для большого ByteBuffer?
Есть ли способ прочитать ByteBuffer с BufferedReader без необходимости сначала превращать его в строку? Я хочу прочитать довольно большой ByteBuffer в виде строк текста, и по соображениям производительности я хочу избежать записи его на диск. Вызов toString для ByteBuffer не работает, поскольку результирующая строка слишком велика (она выбрасывает java.lang.OutOfMemoryError: пространство кучи Java). Я бы подумал, что в API будет что-то, чтобы обернуть ByteBuffer в подходящий ридер, но я не могу найти ничего подходящего.
Вот пример сокращенного кода, иллюстрирующий то, что я делаю):
<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>