【发布时间】:2012-01-26 16:40:39
【问题描述】:
我正在将数据从一台设备发送到另一台设备(Samsung Tab 和 Sony Xperia)。 一切正常,直到我达到 994 字节的长度。 此时,它将其拆分为 2 条 990 和 4 字节的消息。所以,当然,反序列化失败了。 我不确定分裂是在发送端还是接收端。
这是为什么呢? 一次发送有没有上限?
如果是这样,我怎样才能把它拼凑起来? 如果我知道 990 是一个固定数字,那么我可以通过组合它们轻松地做到这一点,但它是否因设备而异?
我给它一个 2000 字节的缓冲区来接收,所以应该有足够的空间。
我正在使用蓝牙示例中的代码。
================================================ ========================
根据以下 TJD:
目前我发送这样一个对象:
公共类BTMessage实现可序列化{
/**
*
*/
private static final long serialVersionUID = -2037775782014806765L;
public int what;
public Object objectToSend;
public int playerId;
public int currentPlayerId;
public BTMessage(int what, int playerId, int currentPlayerId, Object objectToSend){
this.what = what;
this.playerId = playerId;
this.currentPlayerId = playerId;
this.objectToSend = objectToSend;
}
objectToSend 是一个可序列化的对象。
然后我将其序列化为字节数组并发送。
BTMessage btMessage = new BTMessage(what,playerId,currentPlayerId,objectToWrite);
write(toByteArray(btMessage));
在另一端,我将过程颠倒过来。
问题是添加长度并不总是有帮助,因为在反序列化接收到的消息时,它还需要反序列化“objectToSend”。由于消息不完整,我仍然遇到同样的问题。
我唯一能想到的就是改成:
public class BTMessage implements Serializable {
/**
*
*/
private static final long serialVersionUID = -2037775782014806765L;
public int len;
public int what;
public byte[] objectToSend;
public int playerId;
public int currentPlayerId;
public BTMessage(int len, int what, int playerId, int currentPlayerId, byte[] objectToSend){
this.len = len;
this.what = what;
this.playerId = playerId;
this.currentPlayerId = playerId;
this.objectToSend = objectToSend;
}
然后我将分两步进行序列化。首先,我将要发送的对象序列化到字节数组中。然后我将实例化“BTMessage”,将序列化创建的字节数组传递为“objectToSend”,然后序列化。 上面现在是:
byte[] message = toByteArray(objectToWrite);
BTMessage btMessage = new BTMessage(message.length,what,playerId,currentPlayerId,message);
write(toByteArray(btMessage));
在另一端,我会反序列化收到的消息。然后我会检查长度并执行另一次读取,直到获得完整长度。 只有这样我才会反序列化发送的完整对象 (objectToSend)。
这是要走的路吗?
【问题讨论】:
-
可能会增加MTU,不知道crazydaks.com/…
-
我看过了——对我来说是中文的!