2013-09-02 20 views
388

Gibt es eine Möglichkeit, Java String in eine byte[] (nicht die Box Byte[]) zu konvertieren?Wie konvertiert man Java String in byte []?

dies Bei dem Versuch:

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()); 

und ich bin immer separate Ausgänge. Die erste Ausgabe kann nicht angezeigt werden, da es sich um eine gzip-Zeichenfolge handelt.

<A Gzip String> 
****** 
[[email protected] 

Die zweite ist eine Adresse. Gibt es irgendetwas, was ich falsch mache? Ich brauche das Ergebnis in einem byte[], um es zu gzip Dekompressor zu füttern, der wie folgt ist.

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()); 
} 
+2

http://stackoverflow.com/questions/5499924/convert-java-string-to-byte-array – Paddyd

+0

Entschuldigung Ich versuche, einen String in Bytearray und zurück zu konvertieren und ein falsches Ergebnis zu erhalten. Ich werde es in einer Weile bearbeiten und zurückkommen. –

+6

Ihr Problem ist, dass 'String.getBytes()' tatsächlich ein Byte-Array zurückgibt, aber Ihre Annahme, dass das 'toString()' eines Byte-Arrays ein nützliches Ergebnis liefert, ist falsch. –

Antwort

739

Das Objekt Ihrer Methode decompressGZIP() braucht, ist ein byte[].

So ist die grundlegende, technische Antwort auf die Frage, die Sie gefragt haben, ist:

byte[] b = string.getBytes(); 
byte[] b = string.getBytes(Charset.forName("UTF-8")); 
byte[] b = string.getBytes(StandardCharsets.UTF_8); // Java 7+ only 

jedoch das Problem, das Sie scheinen mit zu ringen ist, dass dies nicht sehr gut an. Rufen Sie toString() auf, geben Sie einfach den Standardwert Object.toString() an, der der Klassenname + Speicheradresse ist. In Ihrem Ergebnis [[email protected] bedeutet [Bbyte[] und 38ee9f13 ist die Speicheradresse, getrennt durch eine @.

Zur Anzeige können Sie:

Arrays.toString(bytes); 

Aber dies wird nur als eine Folge von durch Kommata getrennte Zahlen angezeigt werden, die möglicherweise nicht sein, was Sie wollen.

Um eine lesbare String zurück von einem byte[], benutzen Sie zu erhalten:

String string = new String(byte[] bytes, Charset charset); 

Der Grund für die Charset Version begünstigt wird, ist, dass alle String Objekte in Java werden intern als UTF-16 gespeichert. Bei der Umwandlung in eine byte[] erhalten Sie eine unterschiedliche Aufschlüsselung der Bytes für die gegebenen Glyphen dieser String, abhängig von dem gewählten Zeichensatz.

+58

byte [] b = string.getBytes ("UTF-8") funktioniert auch –

+24

string.getBytes ("UTF-8") erfordert die Behandlung einer UnsupportedEncodingException, während string.getBytes (Charset.forName ("UTF-8")) nicht. Die Frage, welche Methode "besser" ist, überlasse ich dem Leser als Übung. –

+16

'string.getBytes (StandardCharsets.UTF_8)' kann auch verwendet werden, und es ist das gleiche wie 'string.getBytes (Charset.forName (" UTF-8 "))' –

40
String example = "Convert Java String"; 
    byte[] bytes = example.getBytes(); 
+1

Vorsicht: [getBytes()] (https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#getBytes()) ist plattformabhängig. Bessere Wahl ist die Verwendung von [getBytes (StandardCharsets.UTF_8)] (https://docs.oracle.com/javase/7/docs/api/java/lang/String.html#getBytes (java.nio.charset.Charset)) –

8

Sie können String.getBytes() verwenden, die das Array byte[] zurückgibt.

12

Versuchen Sie es mit String.getBytes(). Es gibt ein Byte [] zurück, das Zeichenfolgedaten darstellt. Beispiel:

String data = "sample data"; 
byte[] byteData = data.getBytes(); 
11

einfach:

String abc="abcdefghight"; 

byte[] b = abc.getBytes(); 
6

Sie könnten wollen versuchen return new String(byteout.toByteArray(Charset.forName("UTF-8")))

+1

Danke für die andere Art von Bytes zu String. – Trismegistos

0
import java.io.UnsupportedEncodingException; 
import java.util.Arrays; 

public class ConvertStringtoByte { 
    public static void main(String[] args) throws UnsupportedEncodingException { 


    String givenString = "stackoverflow"; 
    System.out.println(givenString); 


    byte[] byteValue = givenString .getBytes(); 

    System.out.println(Arrays.toString(byteValue)); 


    byte[] byteValueAscii= letters.getBytes("US-ASCII"); 
    System.out.println(Arrays.toString(byteValueAscii)); 
    } 
} 
0

Es ist nicht notwendig Java als String-Parameter zu ändern. Sie haben den C-Code zu ändern, um einen String ohne Zeiger und in ihrem Code zu erhalten:

Bool DmgrGetVersion (String szVersion); 

Char NewszVersion [200]; 
Strcpy (NewszVersion, szVersion.t_str()); 
.t_str() applies to builder C++ 2010 
Verwandte Themen