Непонятно, для чего вы используете байтовый буфер для начала. Если у вас есть InputStream
и вы хотите прочитать строки для него, почему бы вам просто не использовать InputStreamReader
, завернутый в BufferedReader
? Какая польза от участия NIO?
Вызов toString()
для ByteArrayOutputStream
звучит для меня плохой идеей, даже если у вас есть место для него: лучше взять его в виде байтового массива и обернуть в ByteArrayInputStream
, а затем InputStreamReader
, если вам действительно нужно иметь ByteArrayOutputStream
. Если вы действительно хотите вызвать toString()
, хотя бы используйте перегрузку, которая принимает имя используемой кодировки символов - в противном случае будет использоваться системное значение по умолчанию, что, вероятно, не то, что вам нужно.
РЕДАКТИРОВАТЬ: Хорошо, так что вы действительно хотите использовать NIO. В конце концов, вы все еще пишете в ByteArrayOutputStream
, поэтому вы получите BAOS с данными в нем. Если вы хотите избежать копирования этих данных, вам нужно извлечь из ByteArrayOutputStream
, например, вот так:
public class ReadableByteArrayOutputStream extends ByteArrayOutputStream
{
/**
* Converts the data in the current stream into a ByteArrayInputStream.
* The resulting stream wraps the existing byte array directly;
* further writes to this output stream will result in unpredictable
* behavior.
*/
public InputStream toInputStream()
{
return new ByteArrayInputStream(array, 0, count);
}
}
Затем вы можете создать входной поток, обернуть его в InputStreamReader
, обернуть его в BufferedReader
, и вы в отъезде.