Java NIO Pipe and ByteBuffer -
मैं पाइप कुछ
ByteBuffer को एक थ्रेड में
IO1 ) को दूसरे में (
IO2 )।
निजी इंक बफर आकार; निजी बूलियन है; रिकॉर्डिंग; निजी थ्रेड IO1; निजी धागा IO2; निजी बाइटबफर बाइटबफर 1; निजी बाइटबफर बाइटबफ़र 2; निजी पाइप पाइप; निजी पाइप। सिंक चैनल स्चैनल; निजी पाइप। स्रोतचैनल स्रोत चैनल; ByteBuffer1 = बाइटबफ़र.ऑलोकेंट डायरेक्ट (बफर साइज़); ByteBuffer2 = बाइटबफ़र.ऑलोकेंट डायरेक्ट (बफर साइज़); // पाइप का एक उदाहरण बनाया गया है {पाइप = पाइप.ओपन (); SkChannel = pipe.sink (); SourceChannel = pipe.source (); IO1.start (); IO2.start (); } पकड़ (IOException ई) {e.printStackTrace (); } -
IO1 = नया थ्रेड (नया रननाबल () {सार्वजनिक शून्य रन ()} isRecording = true; recorder.startRecording (); {आइए पढ़ने के लिए, जबकि (आईआरईसी रिकॉर्डिंग) {// बाइट बफर 1.क्लायर (); पढें = रिकॉर्डर। रीड (बाइट बफर 1, बफर साइज़); अगर (ऑडियोरेकॉर्ड। "======== आईओ 1", स्ट्रिंग.वल्यूओफ़ (पठन)); // यह लगभग 20 गुना / सेकंड}} रिकॉर्डर। स्टॉप ();} पकड़ (अपवाद ई) {ई.प्रिंटस्टैक्सट्रेस (); }}}); skChannel.write (byteBuffer1); और लॉग। V ("======== IO1", String.valueOf (पढ़ें );); लगभग 20 गुना / सेकंड चालू होता है, और यह अपेक्षित व्यवहार है, अब तक अच्छा है।
IO2 = नया थ्रेड (नया रननाबल () {सार्वजनिक शून्य रन () ({Read read = sourceChannel.read (byteBuffer2)) gt; {Log.v ("======== IO2", String.valueOf (read)); / / यह केवल एक बार ट्रिगर // codec आदि करने के लिए // ............}} पकड़ (IOException e) {e.printStackTrace ();} लॉग। V ("==== ==== आईओ 2 "," अंत !!!!! "); // ट्रिगर नहीं हुआ (यह ठीक है)}}); हालांकि, लॉग। V ("======== आईओ 2", स्ट्रिंग.वल्यूओफ़ (पठन)); केवल एक बार शुरू हो रहा है, और मुझे पता नहीं क्यों
क्या कोई मुझे बता सकता है कि मैं थ्रेड IO1 में IO2 ?
धन्यवाद के अपडेट कैसे प्राप्त करूं?
आपको लिखने से पहले बफर को फ़्लिप करने की आवश्यकता है, और बाद में इसे कॉम्पैक्ट () करें।
लेकिन: एक शब्द में, मत करो धागे के बीच पाइप्स मूल रूप से व्यर्थ हैं एक कतार का प्रयोग करें, या प्राप्त थ्रेड को भेजने के धागे के इनपुट को सीधे पढ़ें।
यदि आपको ऐसा करना है, तो बुनियादी एनआईओ कॉपी लूप इस तरह से आता है:
जबकि ( In.read (बफर)> gt; बफर। (या) & gt; 0) या जो कुछ भी आपकी एपीआई की आवश्यकता है {buffer.flip (); out.write (बफर); buffer.compact (); }
Comments
Post a Comment