2011-12-21 306 views
0

我的输出是“[B @ b42cbf”,没有错误。如何在Java中打印字符串而不是地址?

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

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

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

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

回答

8

[[email protected]是您在打印字节数组(即二进制数据)时得到的结果。

为了得到一个字符串,你需要知道的编码,然后你可以这样做:

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

当然,只有当数据实际上是可打印数据的工作。

+0

+1是的,你说得很对,这样好多了。我应该对我的SO进行宵禁。 – 2011-12-21 08:43:04

1

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

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

也就是说,建立一个字符串中的字符串。并注意这使用默认编码。

2

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

相关问题