如何在Java中打印String而不是地址?

时间:2011-12-21 08:25:52

标签: java string object-address

我的输出是“[B @ b42cbf”没有错误。

它应该是一个表示“服务器检查”的字符串。

如何修复代码以输出字符串而不是地址?

我打印对象的代码已经多次更改,但现在如下所示。

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

我的数据包类如下。

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

我通过ObjectOutputStream发送数据包并在ObjectInputStream中接收它。该对象被包含在具有(分组)的分组中。你可以看到它的工作原理如下。

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...");
        }
    }

这是听众。

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

3 个答案:

答案 0 :(得分:8)

[B@b42cbf是打印字节数组时得到的,即二进制数据。

要从中获取字符串,您需要知道编码,然后您可以执行以下操作:

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

当然,只有当数据实际上是可打印数据时才有效。

答案 1 :(得分:2)

getMessage()返回一个字节数组。数组的toString()方法不打印其内容。您可以让getMessage()改为String

答案 2 :(得分:1)

这是正常的,您将数组对象打印为String。

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

也就是说,在其中的字节中构建一个String。请注意,这使用默认编码。