मैं सॉकेट से एक बाइट सरणी में एक स्ट्रिंग जो की तरह लग रहे प्राप्त करते हैं:स्ट्रिंग रूपांतरण के लिए बाइट सरणी में स्ट्रिंग के अंत का पता लगाने के लिए कैसे?
[128,5,6,3,45,0,0,0,0,0]
आकार नेटवर्क प्रोटोकॉल द्वारा दिए गए मेरे उदाहरण में (शून्य सहित) स्ट्रिंग की कुल लंबाई है हां, तो 10
तो मैं बस कार्य करें:
String myString = new String(myBuffer);
मैं स्ट्रिंग 5 गैर सही caracter के अंत में है। रूपांतरण स्ट्रिंग कैरेक्टर (0) के अंत का पता लगाने के लिए प्रतीत नहीं होता है।
int sizeLabelTmp = 0;
//Iterate over the 10 bit to get the real size of the string
for(int j = 0; j<(sizeLabel); j++) {
byte charac = datasRec[j];
if(charac == 0)
break;
sizeLabelTmp ++;
}
// Create a temp byte array to make a correct conversion
byte[] label = new byte[sizeLabelTmp];
for(int j = 0; j<(sizeLabelTmp); j++) {
label[j] = datasRec[j];
}
String myString = new String(label);
वहाँ एक बेहतर तरीका समस्या को संभालने के लिए है:
सही आकार और सही स्ट्रिंग मैं यह नहीं प्राप्त करने के लिए?
धन्यवाद
+1 खाते में एन्कोडिंग लेने के लिए +1। यदि सॉकेट पर प्राप्त सामान सिर्फ एक धारावाहिक जावा स्ट्रिंग है तो यह ठीक होना चाहिए। –
@G_H: "बस एक धारावाहिक जावा स्ट्रिंग" वास्तव में निर्दिष्ट नहीं करता है कि धारावाहिक प्रारूप क्या है। यदि ओपी जावा बाइनरी सीरियलाइजेशन का उपयोग कर रहा था तो वह इस ऑपरेशन को स्पष्ट रूप से वैसे भी नहीं कर रहा होगा ... और यदि यह कुछ अन्य धारावाहिक प्रारूप है, तो हमें * * * जानने की आवश्यकता होगी। –
मुझे शायद बात करना बंद कर देना चाहिए ... तथ्य यह है कि, मैंने हमेशा नरक को क्रमबद्धता से दूर रखा है और सभी विवरणों को अच्छी तरह से नहीं जानते हैं। जेएक्सबी या जेपीए आमतौर पर एकमात्र चीज है जिसे मैं एक विकल्प भी मानता हूं। –