La différence entre la Chaîne.getBytes() et IOUtils.toByteArray()?
Je suis en essais le IOUtils. J'ai des problèmes pour convertir un InputStream dans un tableau d'octets:
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)[...]
Je ne vois pas pourquoi ne pas passer le test. Quel est le problème?
OriginalL'auteur Falci | 2012-11-23
Vous devez vous connecter pour publier un commentaire.
Spécifiant l'encodage est important.
Vous n'avez fourni aucun codage pour les bibliothèques de travailler avec, et comme un résultat, le "défaut" de codage est utilisé à la place. Je devine que, depuis l'un de vos tableaux d'octets est deux fois la taille de l'autre, l'un encodage utilisé est UTF-16 et l'autre UTF-8/ASCII.
Essayez ceci:
IOUtils.toByteArray (new StringReader (LOREM_IPSUM), "UTF-8"); IOUtils.toByteArray (new InputStreamReader (is), "UTF-8");
Ah, n'est-ce pas que vous êtes à l'aide de java.io.InputStream. Vous aurez besoin d'utiliser un Lecteur, ou plus précisément StringReader:
byte[] actuals = org.apache.commons.io.IOUtils.toByteArray(new StringReader(LOREM_IPSUM), "UTF-8");
Mon commentaire était juste pour clarifier. Je vous remercie encore.
OriginalL'auteur Phil K