2012-11-23 10 views
9

Testuję IOUtils. Mam problemy konwertować InputStream do tablicy bajtów:Różnica między String.getBytes() i 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)[...] 

ja nie rozumiem, dlaczego nie przejść test. Co jest nie tak?

Odpowiedz

9

Określanie kodowania jest ważne.

Nie zapewniono żadnego kodowania bibliotek, z którymi można pracować, w wyniku czego zostanie użyte "domyślne" kodowanie. Zgaduję, że ponieważ jedna z tablic bajtowych jest dwa razy większa od drugiej, jednym z używanych kodowań jest UTF-16, a drugi UTF-8/ASCII.

Spróbuj tego:

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

Dziękujemy! Ale toByteArray nie akceptuje InputStream i String. Dwie opcje: 'IOUtils.toByteArray (nowy StringReader (LOREM_IPSUM)," UTF-8 "); IOUtils.toByteArray (nowy InputStreamReader (jest), "UTF-8"); ' – Falci

+0

Ah, nie zauważyłem, że używasz java.io.InputStream. musisz użyć czytnika, a dokładniej StringReader: 'byte [] wartości rzeczywistych = org.apache.commons.io.IOUtils.toByteArray (nowa StringReader (LOREM_IPSUM), "UTF-8");' –

+0

mój komentarz było tylko wyjaśnienie. Jeszcze raz dziękuję. – Falci