2011-04-07 13 views
5

साल मैं इस तरह एक पाश में InputStreams से पढ़ कर दिया गया है के लिए:अधिक सुरुचिपूर्ण इनपुट स्ट्रीम लूप पढ़ा?

final byte[] buffer = new byte[65536]; 
InputStream is = ...; 
int r; 
while ((r = is.read(buffer)) > 0) { 
    ... 
} 

लेकिन मुझे आश्चर्य है अगर वहाँ एक रास्ता (दूसरी शर्त को शुरू करने के बिना) पाश में है कि काम से बचने के लिए है - जैसे इस कोड को मैं भी कम सुरुचिपूर्ण पर विचार के रूप में वहाँ दो पढ़ा बयान और दो शर्तें हैं: एक और अधिक सुरुचिपूर्ण के लिए

r = is.read(buffer); 
if (r > 0) { 
    do { 
     ... 
     r = is.read(buffer); 
    } while (r > 0); 
} 

कोई भी विचार (कॉम्पैक्ट, सशर्त में कार्य के बिना) का निर्माण?

+1

तुलना (आर> 0) की बजाय तुलना नहीं होना चाहिए (आर> 0)? धारा का अंत -1 से संकेत मिलता है। – Leonel

उत्तर

5

आप इस बारे में क्या सोचते हैं है :

for (int count = stream.read(buffer); count >= 0; count = stream.read(buffer)) { 
    ..... 
} 

यह कॉम्पैक्ट है और गिनती चर की छोटी संभव गुंजाइश रहती है, लेकिन यह कम पठनीय माना जा सकता है

+0

मुझे यह पसंद है, और कोई स्पष्ट समस्या नहीं दिख रही है। कोशिश कर लेंगे। – Eugene

4

आईएमओ, पहला सबसे अच्छा और सबसे कॉम्पैक्ट है। :)

2

करें {} जबकि() बुरा है और किसी भी तरह से सुरुचिपूर्ण नहीं है।

मैं आमतौर पर (सशर्त में कोई असाइनमेंट के साथ) ऐसा करते हैं:

int count = stream.read(buffer); 

while (count >= 0) { 
    ... 
    count = stream.read(buffer); 
} 

इस एक ही पंक्ति में दो बार हो रहा का नकारात्मक पहलू है, लेकिन है कि सबसे अच्छा मैं

मिला
+0

+1 सीधा और पढ़ने के लिए बहुत आसान है। – jahroy

0

मैं इस तरह से करता हूं लेकिन यह उतना ही कम है।

InputStream input; 
    final int bytes = 100; 
    final byte[] bArray = new byte[bytes]; 
    input.read(bArray, 0, bytes); 

    int c = input.read(); 
    while (c >= 0) { 
     ............. 
     ............. 

     c = input.read(); 
    } 
संबंधित मुद्दे