2012-11-23 39 views
9

मैं IOUtils का परीक्षण कर रहा हूं। मैं एक बाइट सरणी में एक InputStream कन्वर्ट करने के लिए समस्या है:String.getBytes() और IOUtils.toByteArray() के बीच अंतर?

private static final String LOREM_IPSUM = "Lorem ipsum dolor sit amet, consectetur adipiscing elit."; 

@Test 
public void testInputStreamToByteArray() throws IOException { 

    byte[] expecteds = LOREM_IPSUM.getBytes(); 
    byte[] actuals = org.apache.commons.io.IOUtils.toByteArray(new StringInputStream(LOREM_IPSUM)); 

    assertArrayEquals(expecteds, actuals); 
} 

स्टैकट्रेस: ​​

java.lang.AssertionError: array lengths differed, expected.length=56 actual.length=112 
    at org.junit.Assert.fail(Assert.java:91) 
    at org.junit.internal.ComparisonCriteria.assertArraysAreSameLength(ComparisonCriteria.java:72) 
    at org.junit.internal.ComparisonCriteria.arrayEquals(ComparisonCriteria.java:36) 
    at org.junit.Assert.internalArrayEquals(Assert.java:414) 
    at org.junit.Assert.assertArrayEquals(Assert.java:200) 
    at org.junit.Assert.assertArrayEquals(Assert.java:213) 
    at [...].testInputStreamToByteArray(HttpsTest.java:20)[...] 

मैं नहीं दिख रहा है यही कारण है कि परीक्षा उत्तीर्ण नहीं। गलत क्या है?

उत्तर

9

एन्कोडिंग निर्दिष्ट करना महत्वपूर्ण है।

आपने पुस्तकालयों के साथ काम करने के लिए कोई एन्कोडिंग प्रदान नहीं की है, और नतीजतन इसके बजाय "डिफ़ॉल्ट" एन्कोडिंग का उपयोग किया जाएगा। मैं अनुमान लगा रहा हूं कि चूंकि आपके बाइट एरे में से एक दूसरे के आकार से दोगुना है, इसलिए इस्तेमाल किया जाने वाला एक एन्कोडिंग यूटीएफ -16 और अन्य यूटीएफ -8/एएससीआईआईआई है।

इस प्रयास करें:

public void testInputStreamToByteArray() throws IOException { 

    byte[] expecteds = LOREM_IPSUM.getBytes("UTF-8"); 
    byte[] actuals = org.apache.commons.io.IOUtils.toByteArray(new StringReader(LOREM_IPSUM), "UTF-8"); 

    assertArrayEquals(expecteds, actuals); 
} 
+0

धन्यवाद! लेकिन ToByteArray इनपुटस्ट्रीम और स्ट्रिंग को स्वीकार नहीं करता है। दो विकल्प: 'IOUtils.toByteArray (नया स्ट्रिंग रीडर (LOREM_IPSUM)," यूटीएफ -8 "); IOUtils.toByteArray (नया इनपुटस्ट्रीम रीडर (है), "यूटीएफ -8"); ' – Falci

+0

आह, ध्यान नहीं दिया कि आप java.io.InputStream का उपयोग कर रहे हैं। आपको एक पाठक, या अधिक विशेष रूप से स्ट्रिंग रीडर का उपयोग करना होगा: 'बाइट [] वास्तविक = org.apache.commons.io.IOUtils.toByteArray (नया स्ट्रिंग रीडर (LOREM_IPSUM)," यूटीएफ -8 ");' –

+0

मेरी टिप्पणी सिर्फ स्पष्ट करने के लिए था। फिर से धन्यवाद। – Falci