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

我的字節大小是10000,但InputStream的大小可能會更低或更高。有沒有辦法只讀取進入InputStream的數據大小?Java如何從InputStream中讀取收入大小?

+0

你問如何將輸入流完全讀入正確長度的字節數組?或者你只是想知道流的大小,而不讀它? – 2014-09-10 10:07:32

+0

@Duncan是的我想讀取正確的大小,確切的大小,沒有更多或更少的字節數組,或任何其他類,可以幫助我保存reared字節 – bbbot 2014-09-10 10:10:29

+0

你不能沒有加載它的大小。 – afzalex 2014-09-10 10:12:20

回答

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),它通過臨時固定大小的緩衝區使用批量讀取和寫入。 – 2014-09-10 10:36:54

-1

你可以不把paramenter在read方法讀取字節的全尺寸數據讀取字節:

len = readerIn.read(); 

可以readstill流的末尾

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

    [your code] 

} 
+0

如果我像這樣讀取它,如果沒有字節緩衝區參數,數據將被放置在哪裏? – bbbot 2014-09-10 10:04:15

+0

這讀取一個字節,並返回一個字節。我不認爲這是你想要的。 – immibis 2014-09-10 10:04:48

+0

這是完全錯誤的。這從輸入流中讀取一個字節。 – 2014-09-10 10:04:55