मेरे पास xmlstream है जो मैं org.apache.wink.json4j.utils.xml < / code>। यहां कोड है
सार्वजनिक शून्य प्रक्रिया (InputStream xmlstream) {अंतिम BufferedInputStream bufferedXmlStream = नया BufferedInputStream (xmlstream); पिपिडइनपुटस्ट्रीम पाइपजसनइनपुटस्ट्रीम = नया पाइपइनपुटस्ट्रीम (); अंतिम पाइप ऑउटपुटस्ट्रीम jsonstream = नया पाइप ऑउटपुटस्ट्रीम (पाइपजेजन इनटस्टस्ट्रीम); धागा xmlToJsonThread = नया थ्रेड (नया रननाबल) {@ ओवरराइड पब्लिक वायड रन () {// अपने कोड को डालता है जो डेटा को आउटस्टस्ट्रीम को लिखता है। {XML.toJson (bufferedXmlStream, jsonStream, true)}} कैच (अपवाद ई ) {E.printStackTrace ();}}}); xmlToJsonThread.setDaemon (सही); xmlToJsonThread.start (); // पाइप स्ट्रीम से प्रक्रिया डेटा BufferedReader रीडर = नए BufferedReader (नई InputStreamReader (pipedJsonInputStream, StandardCharsets.UTF_8)); मुख्य धागे में आगे की प्रक्रिया json में {// उपयोग रीडर का उपयोग करें ... parseJsonStream (reader); } अंत में {reader.close (); jsonStream.close (); }}
जब XML.toJson अपवाद फेंकता है, तो मुझे लगता है कि मुख्य थ्रेड से बाहर नहीं निकलता है इससे मैं कैसे निपटूं ? क्या आप लोग सोचते हैं कि यह आगे प्रसंस्करण के लिए जेएसएन स्ट्रीम पर एक्सएमएल स्ट्रीम को परिवर्तित करने का एक अच्छा तरीका है? मैं वास्तव में किसी भी सुझाव की सराहना करता हूँ आपका बहुत बहुत धन्यवाद!
समस्या यह है कि बच्चे के धागे पर अपवाद को मुख्य थ्रेड पर वापस रिपोर्ट करने की आवश्यकता है ऐसा करने के लिए यह मुश्किल हो सकता है जब तक आप पाठक और लेखक दोनों को अलग थ्रेड में नहीं डालते।
जिस तरह से मैं ऐसा करता हूं, वह एक निष्पादन समाप्ति सेवा
में दोनों टुकड़ों को लपेटें: / P>
सार्वजनिक शून्य प्रक्रिया (InputStream xmlstream) {निष्पादक सेवा धागापूल = निष्पादक। NewfixedThreadPool (2); ExecutorCompletionService & LT; शून्य & gt; ईसीएस = नया निष्पादक समाप्ती सेवा & lt; & gt; (थ्रेडपूल); अंतिम BufferedInputStream bufferedXmlStream = नया BufferedInputStream (xmlstream); पिपिडइनपुटस्ट्रीम पाइपजसनइनपुटस्ट्रीम = नया पाइपइनपुटस्ट्रीम (); अंतिम पाइप ऑउटपुटस्ट्रीम jsonstream = नया पाइप ऑउटपुटस्ट्रीम (पाइपजेजन इनटस्टस्ट्रीम); Ecs.submit (नया कॉलबल & lt; शून्य & gt; () {@ ओवरराइड पब्लिक व्हॉइड कॉल () {/ / / / / / कोड को आउटपुट स्ट्रीम में डेटा लिखता है, जो आपके कोड को डालता है। {XML.toJson (bufferedXmlStream, jsonStream, true)}} पकड़ (अपवाद E) {e.printStackTrace (); फेंक ई;} वापसी नल;}}); Ecs.submit (नया कॉल करने योग्य & lt; शून्य & gt; () {@ ओवरराइड पब्लिक व्हॉइड कॉल () {try to use / reader);} Jsonstream.close ();} वापसी नल;}}); // सभी कार्यों की प्रतीक्षा करें // एक अन्य धागा को मार डालें अगर कोई अपवाद को मारता है कोशिश (for int i = 0; i & lt; 2; ++ i) {ecs.take ()। Get (); }} अंत में {threadPool.shutdownNow (); }}
No comments:
Post a Comment