2011-11-18 18 views
13

यह देखते हुए कि ग्रोवी के पास कुछ समय-समय पर बयान नहीं है, मैं इनपुट स्ट्रीम में सभी बाइट्स को कैसे पुन: सक्रिय कर सकता हूं?ग्रोवी का उपयोग करके इनपुटस्ट्रीम में सभी बाइट्स पर मैं फिर से कैसे सक्रिय करूं, बशर्ते कि इसमें कुछ समय-समय पर बयान न हो?

प्रति एक previous version of the Groovy user guide:

नहीं 'कर ... जबकि()' वाक्य रचना के रूप में अभी तक।

अस्पष्टता के कारण, हम अभी तक करते हैं के लिए समर्थन .. नहीं जोड़ा जबकि ग्रूवी

क्या ग्रूवी में निम्नलिखित जावा कोड की तरह कुछ करने के लिए सबसे अच्छा तरीका होगा है?

def numRead = inputStream.read(fileBytes, 0, fileBytes.length); 
do{ 

} while(numRead > 0); 

(मैं जानता हूँ कि मुझे लगता है कि एक बूलियन का उपयोग कर, मैं सिर्फ वहाँ अगर यह करने का एक "ग्रूवी" जिस तरह से जानना चाहते हैं कर सकते हैं)

+0

बेहतर जवाब टिम द्वारा येट्स: http://stackoverflow.com/questions/20921546/elegant-way-for-do-while-in-groovy –

उत्तर

13

ग्रूवी (संस्करण 1.8+) जिस तरह से इस तरह होगा :

inputStream.eachByte(BUFFER_SIZE) { buffer, numRead -> 
    ... 
} 
+0

धन्यवाद, मैं वास्तव में क्या देख रहा था के लिये। – talnicolas

+0

@ataylor मैं इस विधि को किसी अन्य परिदृश्य में कैसे लागू कर सकता हूं जहां 'BUFFER_SIZE' केवल लूप के अंदर जाना जाता है? बस, मुझे लूप के अंदर जाने के बिना 'BUFFER_SIZE' के मान को नहीं पता है। –

2

उपयोग करें:

for(;;){ // infinite for 
    ... 

    if(numRead == 0){ //condition to break, oppossite to while 
     break 
    } 
} 
12

मुझे पता है कि एक पुराने और पहले से ही उत्तर सवाल है। लेकिन यह पहली बार है जब गुगली करते समय 'ग्रोवी डू जबकि' के लिए पॉप अप होता है।

मैं सामान्य लगता है काफी करते-करते हुए ग्रूवी में पर्याय हो सकता है:

while ({ 
    ... 

    numRead > 0 
}()) continue 

कृपया ऊपर के उदाहरण पर विचार करें। कुछ 'अनावश्यक' ब्रैकेट को छोड़कर यह बल्कि अच्छी तरह से पठनीय वाक्यविन्यास है।

और यहाँ यह कैसे काम करता है:

    while हालत के अंदर
  1. दौर कोष्ठक को बंद करने धनुषाकार कोष्ठक खुला के साथ परिभाषित किया गया है
  2. बंद होने के बाद धनुषाकार कोष्ठक पास
  3. भीतरी दौर कोष्ठक जोड़ी के साथ इनलाइन निष्पादित हो जाता है
  4. बंद करने के अंदर की आखिरी पंक्ति का मूल्य वह मान है जो लूप को तोड़ देगा जब यह बंद हो जाएगा (इसे बंद होने से वापस किया जा रहा है)
  5. continue स्थिति के बाद गोल ब्रैकेट बंद केवल इसलिए है क्योंकि 'कुछ' होना चाहिए, कोई संकलित बयान। उदाहरण के लिए यह 0 हो सकता है, हालांकि continue बहुत बेहतर लगता है।

संपादित करें: यह सुनिश्चित नहीं है कि यह ग्रोवी का एक नया संस्करण है या मैंने इसे पहले याद किया है। इसके बजाय continue अर्धविराम भी करेगा। तो फिर यह प्रकार है:

while ({ 
    ... 

    numRead > 0 
}()); 
+2

यह बहुत अच्छा और सुरुचिपूर्ण है, धन्यवाद! – jk47

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^