Android如何知道转移的对象大小?

时间:2015-04-06 23:32:05

标签: java android bluetooth

我有一个通过蓝牙传输可序列化对象的应用程序。

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

我需要下一个场景:

  • 客户端将对象推送到服务器
  • 服务器读取与缓冲区大小相关的字节(在我的情况下 - 1024字节)
  • 服务器将字节反序列化为我的对象。

所以,
我怎么知道我读whole object or just a part of him

P.S。对象可能有很大的尺寸,例如超过100mb。

2 个答案:

答案 0 :(得分:0)

您说您正在发送可序列化的对象,据我所知,您正在使用ObjectOutputStream.writeObject().

在这种情况下你根本不应该读取字节,你应该使用ObjectInputStream.readObject().

答案 1 :(得分:-1)

这不是答案,只是提案(建议)。

如果我使用标记字节来检测对象的BEGINEND怎么办?

例如:

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])等于的概率是多少?