Difference between String.getBytes() and IOUtils.toByteArray()?
apache-commons, arrays, java, junit
Solution
Specifying the encoding is important.
You haven't provided any encoding for the libraries to work with, and as a result the "default" encoding will be used instead. I'm guessing that since one of your byte arrays is twice the size of the other, one encoding used is UTF-16 and the other UTF-8/ASCII.
Try this:
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);
}
Problem
I'm testing the IOUtils. I have problems to convert an InputStream into a byte array: ``` 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)[...] ``` I do not see why not pass the test. What is wrong?