简体   繁体   中英

Java byte[] to string conversion outputting byte

In my code, I am sending a txt file encoded into a byte array over the internet, and then converting the message back on the other side and displaying it. The problem is that when I try displaying it, it always comes out as "[B@1ef9f1d" or "[B@1764be1" etc.

This is what recieves the data

private void parsePacket(byte[] data, InetAddress address, int port) {
    String datasent[] = (new String(data).trim()).split(",");
    String type = datasent[0];
    String message = datasent[1];
    switch(type){//Data we are receiving from client, type is 5 char
    default:
        System.out.println(type);
        System.out.println(message);
    case "invalid":
        println("Invalid packet", new Color(255, 155, 155));
        break;
    case "login":
        addConnection(message, address, port);
        break;
    case "SendLog":
        printLog(message);
        break;
    }
}
private void printLog(String message) {
    int charperline = 10;
    String line ="";
    for (int i = 0; i < message.length() / charperline; i++){
        for (int j = 0; j < charperline; j++){
        line += message.charAt(i + j);
        }
        println("LOG: " + line);
        line = "";
    }

}

And this is what sends it:

public void sendLog(){
    System.out.println("sendlog()");
    InputStream is = getClass().getResourceAsStream("/LOG.txt");
    try
    {
        byte[] text = new byte[10000];
        is.read(text);
            sendData(("SendLog," + text).getBytes());
        //is.close();
        new File("/LOG.txt").delete();
    } catch (IOException e) {
        e.printStackTrace();
    } 
}
public void sendData(byte[] data){
    DatagramPacket packet = new DatagramPacket(data, data.length, ipAddress, 1332);
    try {
        socket.send(packet);
    } catch (IOException e) {
        e.printStackTrace();
    } catch (NullPointerException e){
        e.printStackTrace();
    }
}

What you are seeing

[B@1ef9f1d

is the result of the method toString() that all classes inherit from the Object class, since all classes in Java extend Object . This is implemented as

public String toString() {
    return getClass().getName() + "@" + Integer.toHexString(hashCode());
}

In this case, getClass().getName() would return [B because it is an array of Bytes.

This is because array objects in Java do not have a custom toString() method, they inherit Object 's.

If you want to print the contents of an array, try

Arrays.toString(yourByteArray);

For custom classes, you should always implement (override) your own custom toString() method. It is useful for logging. Note that String concatenation when used with reference types uses the toString() method implicitly to convert your object into a String representation.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM