2012-05-07 9 views
9

यहाँ से ByteArrayInputStream का उपयोग कर कोड है, लेकिन मिल गया त्रुटि:प्राप्त बाइट [] एक सॉकेट

bin = new ByteArrayInputStream(socket.getInputStream()); 

यह एक सॉकेट से ByteArrayInputStream का उपयोग कर byte[] प्राप्त करने के लिए संभव है?

+1

* नीचे के रूप में बाइट सरणी इनपुट धारा उत्पन्न कर सकते हैं "लेकिन त्रुटि मिली:" गॉट क्या त्रुटि *? हमेशा प्रश्न में अपवाद और त्रुटि आउटपुट कॉपी/पेस्ट करें (कोड टैग का उपयोग करके)। –

+0

आपका प्रश्न समझ में नहीं आता है। एक ByteArrayInputStream बाइट सरणी से बाइट्स पढ़ता है। यदि आप सॉकेट से पढ़ना चाहते हैं तो आप बाइट्स की सरणी से नहीं पढ़ सकते हैं। आप यहां हल करने की क्या समस्या कर रहे हैं? – EJP

उत्तर

21

नहीं। आप ByteArrayInputStream का उपयोग करते हैं जब आपके पास बाइट्स की सरणी होती है, और आप सरणी से पढ़ना चाहते हैं जैसे कि यह एक फ़ाइल थी। तुम सिर्फ सॉकेट से बाइट्स की सरणियों को पढ़ने के लिए चाहते हैं, तो ऐसा करते हैं:

InputStream stream = socket.getInputStream(); 
byte[] data = new byte[100]; 
int count = stream.read(data); 

चर count बाइट की संख्या में होते हैं वास्तव में पढ़ा जाएगा और यह डेटा निश्चित रूप से सरणी data में होगा।

7

आपको सॉकेट से सीधे पढ़कर ByteArrayInputStream का उदाहरण नहीं मिल सकता है।
आपको पहले पढ़ने और बाइट सामग्री खोजने की आवश्यकता है।
फिर ByteArrayInputStream का उदाहरण बनाने के लिए इसका उपयोग करें।

InputStream inputStream = socket.getInputStream(); 

// read from the stream 
ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
byte[] content = new byte[ 2048 ]; 
int bytesRead = -1; 
while((bytesRead = inputStream.read(content)) != -1) { 
    baos.write(content, 0, bytesRead); 
} // while 

अब, जैसा कि आप हाथ में baos है, मुझे नहीं लगता कि आप अभी भी एक bais उदाहरण की क्या ज़रूरत है।
लेकिन, यह पूरा करने के लिए,
आप

ByteArrayInputStream bais = new ByteArrayInputStream(baos.toByteArray()); 
संबंधित मुद्दे