Как напечатать String вместо адреса в Java? - PullRequest
0 голосов
/ 21 декабря 2011

Мой вывод "[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. Объект привязан к пакету с (Packet). Вы можете увидеть, как это работает следующим образом.

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 ]

8 голосов
/ 21 декабря 2011

[B@b42cbf - это то, что вы получаете при печати байтового массива, то есть двоичных данных.

Чтобы получить строку из этого, вам нужно знать кодировку, а затем вы можете сделать:

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

Конечно, это работает, только если эти данные на самом деле являются данными для печати. ​​

2 голосов
/ 21 декабря 2011

getMessage() возвращает байтовый массив.Метод toString() для массива НЕ печатает его содержимое.Вместо этого вы можете getMessage() вернуть String.

1 голос
/ 21 декабря 2011

Это нормально, вы печатаете объект массива в виде строки.

Использование: System.out.println(new String(packet.getMessage());.

То есть строите в нем строку из байтов.И обратите внимание, что здесь используется кодировка по умолчанию.

...