पर एक नियमित अभिव्यक्ति को लागू करना मैं जावा I/O स्ट्रीम में नियमित अभिव्यक्ति लागू करने का एक उदाहरण चाहता हूं जो स्ट्रीम को केवल स्ट्रिंग में परिवर्तित नहीं करता है क्योंकि मैं बाइनरी डेटा को संरक्षित करना चाहता हूं। इंटरनेट डेटा पर अधिकांश उदाहरण टेक्स्ट डेटा पर ध्यान केंद्रित करते हैं ...जावा I/O स्ट्रीम
उत्तर
स्ट्रीम को बाइट सरणी में कनवर्ट करें।
यह उल्लेख किया जाना चाहिए कि इनपुट केवल लोड होने पर ही यह समझ में आता है अपने आकार के दोनों शब्दों और लोडिंग के लिए जरूरी समय में स्मृति में! इसका मतलब है कि आपको एक विश्वसनीय कार्यक्रम लिखने के लिए स्ट्रीम द्वारा प्रदान किए गए डेटा की लंबाई जानने की आवश्यकता है। एक स्ट्रीम की इनपुट लम्बाई को जानना संभावित उद्देश्यहीन डेटा प्रदान करने के अपने उद्देश्य के विपरीत है! –
रेगेक्स संचालन तारों पर किया जाना चाहिए, जो बाइनरी डेटा के एन्कोडेड बाइट हैं। आप डेटा के बाइट्स पर रेगेक्स ऑपरेशंस नहीं कर सकते हैं, आपको पता नहीं है कि वे क्या प्रतिनिधित्व करते हैं।
-1 मैं असहमत हूं। कोई कारण नहीं है कि आप बाइनरी डेटा पर नियमित अभिव्यक्ति क्यों लागू नहीं कर सकते हैं। बाइनरी डेटा का यह मतलब नहीं है कि आपको पता नहीं है कि वे क्या प्रतिनिधित्व करते हैं। –
माना जाता है कि आप 0 और 1 की धारा ले सकते हैं और उस पर रेगेक्स कर सकते हैं। हालांकि मौजूदा जावा एपीआई में से कोई भी आपको उस कच्ची धारा तक पहुंच प्रदान नहीं करता है, इसे बिना किसी सार्थक रूप में परिवर्तित किए। –
+1 सहमत हैं, बाइनरी डेटा पर regexp लागू करने से कोई मतलब नहीं है। Regexps मूल रूप से स्ट्रिंग्स के लिए तैयार हैं, उन्हें स्ट्रिंग्स का उपयोग करके परिभाषित किया गया है, इसलिए आप हमेशा एक स्ट्रिंग एन्कोडिंग का उपयोग करेंगे, या तो स्पष्ट रूप से या स्पष्ट रूप से। –
आवश्यक कार्यक्षमता जावा मानक पर मौजूद नहीं है। आपको jakarta regexp, और विशेष रूप से, StreamCharacterIterator कक्षा का उपयोग करना होगा। यह वर्ग regexp संचालन में उपयोग के लिए एक इनपुटस्ट्रीम encapsulates।
यदि आप मानक नियमित अभिव्यक्ति पैकेज का उपयोग करना चाहते हैं, तो मैं सुझाव देता हूं कि पिछली कक्षा से स्रोत लें और के बजाय CharSequence लागू करके अनुबंध को बदलें।
CharSequence को कार्यान्वित करने वाला एक मुद्दा यह है कि इंटरफ़ेस को कक्षा को 'सार्वजनिक int लंबाई()' लागू करने की आवश्यकता होती है। यदि आप किसी स्ट्रीम से पढ़ रहे हैं, तो आप लंबाई नहीं जान पाएंगे और रेगेक्स इंजन का जवाब वापस नहीं कर पाएंगे। – monkeysplayingpingpong
Ragel का उपयोग करने का प्रयास करें - संक्रमण कॉलबैक के साथ नियमित अभिव्यक्ति उपकरण।
स्ट्रीम और हिस्सों पर लागू किया जा सकता है।
- 1. IO
- 2. अवलोकन नेटवर्क IO पार्सिंग
- 3. सॉकेट io
- 4. फ़ाइल io
- 5. जावा में स्ट्रीम वीडियो
- 6. जावा विभिन्न आउटपुट स्ट्रीम
- 7. जावा स्ट्रीम कीबोर्ड इनपुट
- 8. मैवेन निर्भरता org.apache.commons के बीच क्या अंतर है: commons-io और commons-io: commons-io?
- 9. /proc/[pid]/io
- 10. मेरी सभी डिस्क IO
- 11. मुझे एसिंक (घटनाक्रम) IO
- 12. अनुकूलन सी # फ़ाइल IO
- 13. सॉकेट.ओ स्ट्रीम को नोड प्रतिलिपि स्ट्रीम
- 14. स्ट्रीम टू स्ट्रिंग जावा/ग्रोवी
- 15. जावा: मल्टीथ्रेडेड कैरेक्टर स्ट्रीम डिकोडिंग
- 16. लिनक्स में परीक्षण IO प्रदर्शन
- 17. एंड्रॉइड ब्राउज़र और सॉकेट io
- 18. सॉस .io phpunit सेलेनियम परीक्षण
- 19. जावा में इनपुट और आउटपुट स्ट्रीम पाइप
- 20. जावा इनपुट स्ट्रीम को बंद करना
- 21. जावा इनपुट स्ट्रीम कितनी करीब है?
- 22. जावा स्ट्रीम में इष्टतम ब्लॉक आकार
- 23. सी ++ इनपुट स्ट्रीम स्ट्रीम आउटपुट स्ट्रीम
- 24. स्ट्रीम
- 25. स्ट्रीम
- 26. स्ट्रीम
- 27. स्ट्रीम
- 28. स्ट्रीम
- 29. स्ट्रीम
- 30. नोडज स्ट्रीम स्ट्रीम बनाम कॉलबैक
आप क्या देख रहे हैं? डेटा को अस्वीकार करें जो regexp से मेल नहीं खाता है? और यदि आप तारों में रूचि नहीं रखते हैं तो आप किस पर मेल खाना चाहते हैं? कुछ स्पष्टीकरण अच्छा होगा –
बस स्पष्टीकरण के लिए: वर्णों में एक रूपांतरण और बाइनरी डेटा पर वापस प्रदर्शन का असर हो सकता है लेकिन रूपांतरण के कारण एकल बाइट खो नहीं जाएगा। – rwitzel
[संभवतः एक स्ट्रीम पर रेगेक्स प्रदर्शन] के संभावित डुप्लिकेट (http://stackoverflow.com/questions/3013669/performing-regex-on-a-stream) –