How to convert Java String into byte[]?

JavaArraysString

Java Problem Overview


Is there any way to convert Java String to a byte[] (not the boxed Byte[])?

In trying this:

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

and I'm getting separate outputs. Unable to display 1st output as it is a gzip string.

<A Gzip String>
******
[B@38ee9f13

The second is an address. Is there anything I'm doing wrong? I need the result in a byte[] to feed it to gzip decompressor, which is as follows.

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

Java Solutions


Solution 1 - Java

The object your method decompressGZIP() needs is a byte[].

So the basic, technical answer to the question you have asked is:

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

However the problem you appear to be wrestling with is that this doesn't display very well. Calling toString() will just give you the default Object.toString() which is the class name + memory address. In your result [B@38ee9f13, the [B means byte[] and 38ee9f13 is the memory address, separated by an @.

For display purposes you can use:

Arrays.toString(bytes);

But this will just display as a sequence of comma-separated integers, which may or may not be what you want.

To get a readable String back from a byte[], use:

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

The reason the Charset version is favoured, is that all String objects in Java are stored internally as UTF-16. When converting to a byte[] you will get a different breakdown of bytes for the given glyphs of that String, depending upon the chosen charset.

Solution 2 - Java

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

Solution 3 - Java

Simply:

String abc="abcdefghight";

byte[] b = abc.getBytes();

Solution 4 - Java

Try using String.getBytes(). It returns a byte[] representing string data. Example:

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

Solution 5 - Java

You can use String.getBytes() which returns the byte[] array.

Solution 6 - Java

You might wanna try return new String(byteout.toByteArray(Charset.forName("UTF-8")))

Solution 7 - Java

It is not necessary to change java as a String parameter. You have to change the c code to receive a String without a pointer and in its code:

Bool DmgrGetVersion (String szVersion);

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

Solution 8 - Java

I know I'm a little late tothe party but thisworks pretty neat (our professor gave it to us)

public static byte[] asBytes (String s) {					
	       String tmp;
	       byte[] b = new byte[s.length() / 2];
	       int i;
	       for (i = 0; i < s.length() / 2; i++) {
	         tmp = s.substring(i * 2, i * 2 + 2);
	         b[i] = (byte)(Integer.parseInt(tmp, 16) & 0xff);
	       }
	       return b;											//return bytes
	}

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionMkl RjvView Question on Stackoverflow
Solution 1 - JavaStewartView Answer on Stackoverflow
Solution 2 - JavaPrabhakaran RamaswamyView Answer on Stackoverflow
Solution 3 - JavaBhaveshView Answer on Stackoverflow
Solution 4 - JavaAnkur ShanbhagView Answer on Stackoverflow
Solution 5 - JavaVimal BeraView Answer on Stackoverflow
Solution 6 - JavaLucas HoepnerView Answer on Stackoverflow
Solution 7 - JavaYardackView Answer on Stackoverflow
Solution 8 - JavaFavnir LiorenthView Answer on Stackoverflow