あるデバイスから別のデバイスにデータを送信しています(Samsung TabとSony Xperia)。 長さが994バイトに達するまではすべて問題ありません。 その時点で、990と4バイトの2つのメッセージに分割されます。もちろん、非直列化は失敗します。 分割が送信側または受信側にあるかどうかはわかりません。AndroidデバイスでBluetoothデータが分割されています
なぜですか? 一度に送信できる最大値はありますか?
もしそうなら、どのようにまとめてもいいですか? 990が固定数であることを知っていたら、それらを組み合わせて簡単に行うことができましたが、それはデバイスによって異なりますか?
私はそれをとてもたくさんの部屋があるはずに受け取るために、2000バイトのバッファを与えています。
私はBluetoothの例のコードを使用しています。
============================================== ========================以下TJDを1として
:現時点では
私はこのようなオブジェクトを送信:
パブリッククラス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がserialiazbleオブジェクトで実現します。
次に、それをバイト配列にシリアル化して送信します。
BTMessage btMessage = new BTMessage(what,playerId,currentPlayerId,objectToWrite);
write(toByteArray(btMessage));
もう一方で、手順を逆にします。
問題は、それはまた、「objectToSend」をデシリアライズしたいと思うでしょう受信したメッセージをデシリアライズするときの長さを追加すると、常に、以来、役に立たないだろうということです。メッセージが不完全なので、私はまだ同じ問題に終わる。その後、私は2つの段階でシリアライズを行うだろう
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));
、Iは、受信したメッセージをデシリアライズであろう。私は長さをチェックし、全長になるまで別の読み取りを行います。 その後、私は送信されたオブジェクト全体を逆シリアル化します(objectToSend)。
これは方法ですか?
MTUを増やしてもいいかもしれないhttp://crazydaks.com/increasing-thruput-of-android-bluetooth-opp-ftp-applications.html – L7ColWinters
私はそこに見えました。 – theblitz