2012-12-19 12 views
5

से पढ़ने पर एन्कोडिंग शून्य (\ u0000) से बचने के लिए कैसे मैं एक अनुरोध निकाय पढ़ रहा हूं और उसे इनपुट स्ट्रीम में डाल रहा हूं। जबकि मैं स्पष्ट रूप से डीकोड विधि कह रहा हूं, स्ट्रिंग के बाद भी मुझे कई \ N0000 (शून्य) मिलते हैं।इनपुटस्ट्रीम

InputStream is = exchange.getRequestBody(); 
byte[] header = new byte[100]; 
is.read(header); 
String s = new String(header, "UTF-8"); 

मैं मानक जावा लाइब्रेरी से कैसे बच सकता हूं? मैं तीसरे पक्ष के पुस्तकालयों का उपयोग नहीं कर सकता।

उत्तर

4

is.read (हेडर); वास्तव में पढ़े गए बाइट्स की संख्या देता है। अपने कोड बदलने के रूप में

byte[] header = new byte[100]; 
int n = is.read(header); 
String s = new String(header, 0, n, "UTF-8"); 
1

InputStreamReader के साथ उपयोग करने का प्रयास करें। अर्थात।

InputStreamReader isr = new InputStreamReader(is, "UTF-8"); 
BufferedReader br = new BufferedReader(isr); 
String line = br.readLine(); 
0

एक बफ़र रीडर का उपयोग करें लाइन द्वारा लाइन इसे पढ़ने के लिए:

InputStream is = exchange.getRequestBody(); 
BufferedReader reader = new BufferedReader(new InputStreamReader(is)) 
String line; 
while((line = reader.readLine()) != null) 
{ 
    // do work 
} 
0

आप line.toCharArray() का मूल्य को देखें, तो आपको लगता है कि null (उर्फ '\u0000') वर्ण दिखाई देखेंगे। उनसे छुटकारा पाने के लिए एक राउंड-सॉल्यूशन समाधान '\u0000' वर्णों को बाहर करने के लिए एक कथन का उपयोग कर केवल उन वर्णों को जोड़ना है जिन्हें आप किसी अन्य सरणी में जोड़ना चाहते हैं। तो:

public String removeNullChars(String line) { 
    String result = ""; 

    // Convert to char array. 
    char[] chars = line.toCharArray(); 

    // Add only chars that are not equal to '\u0000' to result 
    for (int i = 0; i < chars.length; i++) { 
     if (chars[i] != '\u0000') { 
      result += chars[i]; 
     } 
    } 

    return result; 
} 
संबंधित मुद्दे