Existe-t-il un moyen de convertir Java String
en byte[]
( pas la boîte Byte[]
)?
En essayant ceci:
System.out.println(response.split("\r\n\r\n")[1]);
System.out.println("******");
System.out.println(response.split("\r\n\r\n")[1].getBytes().toString());
et je reçois des sorties séparées. Impossible d'afficher la première sortie car il s'agit d'une chaîne gzip.
<A Gzip String>
******
[B@38ee9f13
Le second est une adresse. Y a-t-il quelque chose que je fais mal? J'ai besoin du résultat dans un byte[]
pour le nourrir au décompresseur gzip, qui est le suivant.
String decompressGZIP(byte[] gzip) throws IOException {
java.util.zip.Inflater inf = new java.util.zip.Inflater();
java.io.ByteArrayInputStream bytein = new java.io.ByteArrayInputStream(gzip);
java.util.zip.GZIPInputStream gzin = new java.util.zip.GZIPInputStream(bytein);
java.io.ByteArrayOutputStream byteout = new java.io.ByteArrayOutputStream();
int res = 0;
byte buf[] = new byte[1024];
while (res >= 0) {
res = gzin.read(buf, 0, buf.length);
if (res > 0) {
byteout.write(buf, 0, res);
}
}
byte uncompressed[] = byteout.toByteArray();
return (uncompressed.toString());
}
String.getBytes()
retourne en effet un tableau d'octets, mais votre croyance que letoString()
tableau d'un octet retournera un résultat utile est incorrecte.Réponses:
L'objet dont votre méthode a
decompressGZIP()
besoin est abyte[]
.La réponse technique de base à la question que vous avez posée est donc:
Cependant, le problème avec lequel vous semblez lutter est que cela ne s'affiche pas très bien. L'appel
toString()
vous donnera simplement la valeur par défautObject.toString()
qui est le nom de la classe + l'adresse mémoire. Dans votre résultat[B@38ee9f13
, le[B
moyenbyte[]
et38ee9f13
est l'adresse mémoire, séparés par un@
.À des fins d'affichage, vous pouvez utiliser:
Mais cela s'affichera simplement sous la forme d'une séquence d'entiers séparés par des virgules, qui peut ou non être ce que vous voulez.
Pour obtenir un
String
retour lisible d'unbyte[]
, utilisez:La raison pour laquelle la
Charset
version est préférée, c'est que tous lesString
objets en Java sont stockés en interne en UTF-16. Lors de la conversion en un,byte[]
vous obtiendrez une répartition différente des octets pour les glyphes donnésString
, en fonction du jeu de caractères choisi.la source
string.getBytes(StandardCharsets.UTF_8)
peut également être utilisé, et c'est la même chose questring.getBytes(Charset.forName("UTF-8"))
StandardCharsets
c'est nouveau avec Java 7Charset.forName("UTF-8")
fait la différence ou pourquoi c'est important.la source
Essayez d'utiliser String.getBytes (). Il renvoie un octet [] représentant des données de chaîne. Exemple:
la source
Simplement:
la source
abc
contient des caractères non US-ASCII, comme"greater than 2³² − 1"
ou simplement des données binaires (comme " A b2")?�
cette chaîne n'a que 5 caractères. Cependant, lorsque j'utilise,getBytes()
j'ai 7 caractères.Vous pouvez utiliser
String.getBytes()
ce qui retourne lebyte[]
tableau.la source
Vous voudrez peut-être essayer
return new String(byteout.toByteArray(Charset.forName("UTF-8")))
la source
Il n'est pas nécessaire de changer java en tant que paramètre String. Vous devez changer le code c pour recevoir une chaîne sans pointeur et dans son code:
la source
Je sais que je suis un peu en retard à la fête mais cela fonctionne plutôt bien (notre professeur nous l'a donné)
la source