InputStream через ReadableByteChannel не читается до концаJAVA

Программисты JAVA общаются здесь
Anonymous
InputStream через ReadableByteChannel не читается до конца

Сообщение Anonymous »

У меня есть проблема: я использую InputStreams и хочу повысить производительность чтения из этого канала. Поэтому я читаю с помощью ReadableByteChannel.

В результате с этим кодом чтение происходит намного быстрее:

Код: Выделить всё

public static String readAll(InputStream is, String charset, int size) throws IOException{

try(ByteArrayOutputStream bos = new ByteArrayOutputStream()){
java.nio.ByteBuffer buffer = java.nio.ByteBuffer.allocate(size);

try(ReadableByteChannel channel = Channels.newChannel(is)){

int bytesRead = 0;

do{
bytesRead = channel.read(buffer);
bos.write(buffer.array(), 0, bytesRead);
buffer.clear();
}
while(bytesRead >= size);
}
catch(Exception ex){
ex.printStackTrace();
}
String ans = bos.toString(charset);
return ans;
}
}
Проблема в следующем: Он не каждый раз читается до конца! Если я пытаюсь прочитать файл, он работает довольно хорошо. Если я читаю из сетевого сокета (например, чтобы запросить веб-страницу вручную), оно иногда останавливается где-то посередине.

Что я могу сделать, чтобы прочитать до конца?

Я не хочу использовать что-то вроде этого:

Код: Выделить всё

StringBuilder result = new StringBuilder();
while(true){
int ans = is.read();
if(ans == -1) break;
result.append((char)ans);
}
return result.toString();
потому что эта реализация медленная.

Надеюсь, вы поможете мне с моей проблемой. возможно, у меня какая-то ошибка в коде.

Вернуться в «JAVA»