2009-02-23 16 views
32

मुझे java.nio.ByteBuffer की सामग्री को java.io.OutputStream में डालना होगा। (इच्छा है कि मेरे पास Channel था लेकिन मैं नहीं करता) ऐसा करने का सबसे अच्छा तरीका क्या है?एक बाइटबफर की सामग्री को आउटपुटस्ट्रीम में कैसे रखा जाए?

मैं ByteBuffer के array() विधि का उपयोग नहीं कर सकते हैं क्योंकि यह केवल पढ़ने के लिए बफर हो सकता है।

मैं इस बाइटबफर का उपयोग करने के बीच आउटपुटस्ट्रीम में भी लिख सकता हूं और नियमित रूप से byte[] का नियमित सरणी कर सकता हूं जिसे मैं सीधे OutputStream.write() उपयोग कर सकता हूं।

उत्तर

44

Channels.newChannel(OutputStream) देखें। यह आपको आउटपुटस्ट्रीम दिया गया एक चैनल देगा। WritableByteChannel एडाप्टर के साथ आप बाइटबफर प्रदान कर सकते हैं जो इसे आउटपुटस्ट्रीम पर लिख देगा।

public void writeBuffer(ByteBuffer buffer, OutputStream stream) { 
    WritableByteChannel channel = Channels.newChannel(stream); 

    channel.write(buffer); 
} 

यह चाल चलाना चाहिए!

+0

यदि मैं चैनल के साथ-साथ स्ट्रीम भी रखता हूं, तो क्या मैं दोनों को कॉल इंटरमीक्स कर सकता हूं? –

+0

हां, निश्चित रूप से, चैनल हर बार चैनल बनाने की लागत कम कर देता है :) –

+8

ध्यान दें कि इस दृष्टिकोण में बाइटबफर से एक अस्थायी सरणी में कॉपी करना शामिल है जिसे आउटपुटस्ट्रीम में लिखा जाता है। यदि प्रदर्शन महत्वपूर्ण है, तो आपको अनावश्यक ब्लॉक प्रतियों से बचने के लिए थोड़ा सा रिफैक्टरिंग करने की आवश्यकता हो सकती है। –

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