Java-通过套接字发送序列化对象
我正在编写一个简单的多人战略游戏。因此,我有一个简单的连接类,它以字符串的形式发送不同类型的信息 消息的一种类型必须是具有游乐场当前信息的ArrayList 我的想法是将ArrayList序列化为一个字符串,然后在其前面设置一个简单的字符串标识符 问题是PrintWriter剪切消息,只发送部分消息Java-通过套接字发送序列化对象,java,sockets,serialization,Java,Sockets,Serialization,我正在编写一个简单的多人战略游戏。因此,我有一个简单的连接类,它以字符串的形式发送不同类型的信息 消息的一种类型必须是具有游乐场当前信息的ArrayList 我的想法是将ArrayList序列化为一个字符串,然后在其前面设置一个简单的字符串标识符 问题是PrintWriter剪切消息,只发送部分消息 public void SendGameInfo(Unit [][] gameStatus){ ByteArrayOutputStream baos = new ByteArrayOutpu
public void SendGameInfo(Unit [][] gameStatus){
ByteArrayOutputStream baos = new ByteArrayOutputStream();
try {
ObjectOutputStream s = new ObjectOutputStream(baos);
s.writeObject(gameStatus);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
writer.print("G: "+baos.toString());
writer.flush();
}
以及我对PrintWriter的初始化:
try {
socket = new Socket(IP_Adress,PORT);
os = socket.getOutputStream();
osw = new OutputStreamWriter(os);
writer = new PrintWriter(osw);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
您不能盲目地将二进制文件转换为
字符串。您将得到无效的内容,即对编码无效的字节;然后它就坏了。用Base64编码。或者,最好不要使用编写器。使用ObjectOutputStream
和方法。Writer
用于字符数据,永远不要通过字符流发送原始字节。感谢您的快速回复。因此,我可以使用ObjectOutputStream
首先写入标识符,然后使用writeObject()
写入对象,然后刷新所有内容。如果我只需要发送字符串,我只需要使用writeUTF()
?使用OutputStream
来构造ObjectOutputStream
并写入它。是的。发送一个long
或任何id,然后发送有效负载writeUTF
将比将字符串作为对象发送更有效。非常感谢:)您不能盲目地将二进制文件转换为字符串。您将得到无效的内容,即对编码无效的字节;然后它就坏了。用Base64编码。或者,最好不要使用编写器。使用ObjectOutputStream
和方法。Writer
用于字符数据,永远不要通过字符流发送原始字节。感谢您的快速回复。因此,我可以使用ObjectOutputStream
首先写入标识符,然后使用writeObject()
写入对象,然后刷新所有内容。如果我只需要发送字符串,我只需要使用writeUTF()
?使用OutputStream
来构造ObjectOutputStream
并写入它。是的。发送一个long
或任何id,然后发送有效负载writeUTF
将比将字符串作为对象发送更有效。非常感谢:)