我有一个通过蓝牙传输可序列化对象的应用程序。
byte[] buffer = new byte[1024];
int bytes;
// Keep listening to the InputStream while connected
while (true)
{
try
{
// Read from the InputStream
bytes = mmInStream.read(buffer, 0, buffer.length);
// manage bytes
}
catch (IOException e)
{
Log.e(TAG, "disconnected", e);
connectionLost();
break;
}
}
我需要下一个场景:
所以,
我怎么知道我读whole object or just a part of him
?
P.S。对象可能有很大的尺寸,例如超过100mb。
答案 0 :(得分:0)
您说您正在发送可序列化的对象,据我所知,您正在使用ObjectOutputStream.writeObject().
在这种情况下你根本不应该读取字节,你应该使用ObjectInputStream.readObject().
答案 1 :(得分:-1)
这不是答案,只是提案(建议)。
如果我使用标记字节来检测对象的BEGIN
和END
怎么办?
例如:
final byte BEGIN = 0b00000000;
final byte END = 0b00001111;
byte[] BEGIN_OBJECT_BLOCK = new byte[1024];
byte[] END_OBJECT_BLOCK = new byte[1024];
for(int i=0; i<1024; i++) {
BEGIN_OBJECT_BLOCK[i] = BEGIN;
}
//send BEGIN_OBJECT_BLOCK
byte[] tmpArray = new byte[1024];
// split object into blocks of 1024 bytes
// for each block -> send to server
for(int i=0; i<1024; i++) {
END_OBJECT_BLOCK[i] = END;
}
//send END_OBJECT_BLOCK
1)这个想法怎么样?
2)这有什么不好的一面?
3)我的BEGIN_OBJECT_BLOCK
在对象中与byte sequence(byte[1024])
等于的概率是多少?