2012-11-23 1 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

인코딩을 지정하는 것이 중요합니다.

라이브러리가 작동하도록 인코딩을 제공하지 않았기 때문에 "기본"인코딩이 대신 사용됩니다. 바이트 배열 중 하나가 다른 크기의 두 배 크기 때문에 하나의 인코딩이 UTF-16과 다른 UTF-8/ASCII 인 것으로 추측합니다.

이 시도 :

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는 InputStream과 String을 허용하지 않습니다. 두 가지 옵션 : 'IOUtils.toByteArray (new StringReader (LOREM_IPSUM), "UTF-8"); IOUtils.toByteArray (new InputStreamReader ("UTF-8")); – Falci

+0

아, 당신이 java.io.InputStream을 사용하고 있다는 것을 알지 못했습니다. 더 구체적으로 StringReader : byte [] actuals = org.apache.commons.io.IOUtils.toByteArray (new StringReader (LOREM_IPSUM), "UTF-8"); ' –

+0

내 의견 그냥 분명히했다. 다시 감사합니다. – Falci

관련 문제