Как напечатать String вместо адреса в Java?
Мой вывод "[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 ответа
[B@b42cbf
это то, что вы получаете, когда вы печатаете байтовый массив, то есть двоичные данные.
Чтобы получить String из этого, вам нужно знать кодировку, а затем вы можете сделать:
String messageStr = new String(packet.getMessage(), "UTF-8");
Конечно, это работает, только если эти данные на самом деле являются данными для печати.
getMessage()
возвращает байтовый массив. toString()
Метод для массива НЕ печатает его содержимое. Вы могли бы сделать getMessage()
вернуть String
вместо.
Это нормально, вы печатаете объект массива в виде строки.
Использование: System.out.println(new String(packet.getMessage());
,
То есть, построить строку из байтов в нем. И обратите внимание, что для этого используется кодировка по умолчанию.