Question

My output is "[B@b42cbf" with no errors.

It should be a string that says "Server Check".

How do I fix my code to put out the string rather than the address?

My code to print the object has been changed several times, but is now as follows.

System.out.println(packet.getMessage().toString());

My packet class is as follows.

import java.io.Serializable;

public class Packet implements Serializable {

    final public short MESSAGE = 0;
    final public short COMMAND = 1;

    private String _ip;
    private short _type;
    private String _source;
    private String _destination;
    private byte[] _message;


    public Packet(String ip, short type, String source, String destination,
            byte[] message) {
        this._ip = ip;
        this._type = type;
        this._source = source;
        this._destination = destination;
        this._message = message;
    }

    public String getIP() {
        return this._ip;
    }

    public Short getType() {
        return this._type;
    }

    public String getSource() {
        return this._source;
    }

    public String getDestination() {
        return this._destination;
    }

    public byte[] getMessage() {
        return this._message;
    }
}

I Send the packet though an ObjectOutputStream and recieve it in an ObjectInputStream. The object is covereted to a packet with (Packet). You can see how this works as follows.

public void sendPacket(Packet packet) throws NoConnection {
        if (this._isConnected) {
            try {
                this._oos.writeObject(packet);
                this._oos.flush();  // Makes packet send
            } catch (Exception e) {
                e.printStackTrace();
                this._isConnected = false;
                throw new NoConnection("No notification of disconnection...");
            }
        } else {
            throw new NoConnection("No connection...");
        }
    }

Here is the listener.

@Override
    public void run() {
        try {
            this._ois = new ObjectInputStream(this._socket.getInputStream());
            Packet packet = (Packet) this._ois.readObject();
            this._listener.addPacket(packet);
        } catch(Exception e) {
            e.printStackTrace();
        }
    }
Was it helpful?

Solution

[B@b42cbf is what you get when you print a byte array, i.e. binary data.

To get a String from that, you need to know the encoding, and then you can do:

String messageStr = new String(packet.getMessage(), "UTF-8");

Of course, that only works if that data is actually printable data.

OTHER TIPS

getMessage() returns a byte array. The toString() method for an array does NOT print its contents. You could make getMessage() return a String instead.

This is normal, you are printing the array object as a String.

Use: System.out.println(new String(packet.getMessage());.

That is, build a String out of the bytes in it. And note that this uses the default encoding.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top