2014-09-10 2 views
-1
byte[] b = new byte[10000]; 
len = readerIn.read(b); // InputStream 

Размер моего байта 10000, но размер InputStream может быть ниже или выше. Есть ли способ читать только размер данных, поступающих в InputStream?Java как читать из InputStream размер?

+0

Вы спрашиваете, как полностью прочитать входной поток в массив байтов правильной длины? Или вы просто хотите знать размер потока, не читая его? –

+0

@ Duncan yes Я хочу прочитать правильный размер, точный размер, не более или менее в массив байтов, или любой другой класс, который может помочь мне сохранить записанные байты. – bbbot

+0

Вы не можете получить размер без его загрузки. – afzalex

ответ

0

Вы можете использовать ByteArrayOutputStream для этого

ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
int reads = is.read(); 

while(reads != -1){ 
    baos.write(reads); 
    reads = is.read(); 
} 

byte[] data = baos.toByteArray(); 

массива данных имеет правильный размер и продолжение ains все данные или InputStream

+2

Чтение и запись одного байта за один раз будет очень неэффективным, особенно если входящий поток не буферизуется внутри. Гораздо лучше будет [этот ответ из связанного дублированного вопроса] (http://stackoverflow.com/a/1264737/592139), который использует массовое чтение и запись через временный буфер фиксированного размера. –

-1

Вы можете прочитать совершенно размер считывания данных побайтно путем не сдачи paramenter в методе чтения:

len = readerIn.read(); 

Вы можете readstill конец потока

while((readerIn.read())!=-1){ 

    [your code] 

} 
+0

если я прочитал его так, где данные будут помещены, если нет байт-буфера? – bbbot

+0

Это считывает один байт и возвращает один байт. Я не думаю, что это то, что вы хотели. – immibis

+0

Это совершенно неправильно. Это считывает один байт из входного потока. –

Смежные вопросы