Lolmewn
Lolmewn

Reputation: 1521

From a byte[] in a string to a string?

I have a problem.

I sent some data over a socket in string form. With some substringing, I managed to get the byte[] in String form [B@58596d12. Now, my question is, this is a string. How do I convert it back to a byte array after which I can use String result = new String(byteArray);?

I tried casting the String to byte[], but that's not allowed. Google only came up with the usual .getBytes() (which I can't use since they already are bytes) and new String(someByteArray)

This is what's being sent:

byte[] all = Files.readAllBytes(f.toPath());
    this.out.println(destinationOfFile + "/" + file.getName() + "*" + all);

And this is what's being received:

private void writeToFile(String str) {
        String file = str.substring(0, str.indexOf("*"));
        String write = str.substring(str.indexOf("*")+1);

EDIT: I managed to do it in another way. Instead of getting all the bytes from the file, I wen't through it line by line, sending each line over the socket. In the client, I store the data in a HashMap and when it receives "Done sending File" it writes all the strings to the file.

Upvotes: 0

Views: 355

Answers (2)

AlexS
AlexS

Reputation: 5345

I'm using this code to convert String-Byte[], but I'm not sure if it will help you because I don't know if you have rawBytes as source or a Java-String. Could you clarify?

public static String byteToHexString(byte b) {
    String result = "";
    result += Integer.toHexString((int)(b >> 4) & 0xf);
    result += Integer.toHexString((int)(b) & 0xf);
    return result;
}

public static String bytesToHexString(final byte[] byteArray) {
    if (byteArray == null) {
        return null;
    }
    String result = "";
    for (int i = 0; i < byteArray.length; ++i) {
        result += byteToHexString(byteArray[i]);
    }
    return result;
}

public static byte[] hexStringToBytes(final String hexString) {
    if (hexString == null) {
        return null;
    }
    byte[] result = new byte[hexString.length() / 2];
    for (int idx = 0; idx < result.length; ++idx) {
        int strIdx = idx * 2;
        result[idx] = (byte) ((Character.digit(hexString.charAt(strIdx), 16) << 4)
                + Character.digit(hexString.charAt(strIdx + 1), 16));
    }
    return result;
}

Edit: If you are converting String-byte[] and byte[]-String I would recommend using the charset or charsetname parameter for String.getBytes() and for the String-constructor. For example:

byte[] bytes = "text".getBytes("UTF-8");
String text = new String(bytes, "UTF-8");

Remember not every platform or jvm may support the same charsets. For a list of charsets have a look here.

If you are reading bytes from a File and want to interpret them as String, you also have to care about using the right charset.

Upvotes: 2

Eser Ayg&#252;n
Eser Ayg&#252;n

Reputation: 8004

If you want to store raw bytes in a String, you should use an encoding designed for this purpose, such as Base64. Take a look at the Commons Codec library and Base64 class.

Upvotes: 3

Related Questions