2012-11-23 11 views
9

Ich teste die IOUtils. Ich habe Probleme, eine Input in eine Byte-Array zu konvertieren:Unterschied zwischen String.getBytes() und 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); 
} 

Stacktrace:

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)[...] 

Ich sehe nicht, warum den Test nicht bestanden. Was ist falsch?

Antwort

9

Die Angabe der Codierung ist wichtig.

Sie haben keine Codierung für die Bibliotheken zur Verfügung gestellt, und daher wird stattdessen die "Standard" -Codierung verwendet. Ich nehme an, dass, da eines Ihrer Byte-Arrays doppelt so groß ist wie das andere, eine verwendete Codierung UTF-16 und die andere UTF-8/ASCII ist.

Versuchen Sie folgendes:

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

Dank! Aber toByteArray akzeptiert InputStream und String nicht. Zwei Optionen: 'IOUtils.toByteArray (neuer StringReader (LOREM_IPSUM)," UTF-8 "); IOUtils.toByteArray (neuer InputStreamReader (is), "UTF-8"); ' – Falci

+0

Ah, habe nicht bemerkt, dass du java.io.InputStream benutzt. Sie müssen einen Reader, oder genauer StringReader verwenden: 'byte [] actuals = org.apache.commons.io.IOUtils.toByteArray (neuer StringReader (LOREM_IPSUM)," UTF-8 ");' –

+0

Mein Kommentar war nur um zu klären. Danke nochmal. – Falci