gpt4 book ai didi

android - 在 Android Gingerbread 上通过蓝牙传输大量数据

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:58:46 27 4
gpt4 key购买 nike

我正在尝试一次将大约 1 兆字节的任意数据从一部 Android 手机传输到另一部。目前,我将大小、命令代码和数据写入 BufferedOutputStream 周围的 DataOutputStream,围绕从 bluetoothSocketInstance 返回的 OutputStream .getOutputStream().

接收手机读取大小和命令代码,然后从输入流中读取,直到它获得所有它期望的数据。这适用于短字符串,但对于较大的文件,并非所有数据都被传输。在调试器中运行应用程序表明写入没有任何异常返回,读取读取了预期字节的一小部分,然后无限期地阻塞。它也不会抛出任何异常。

某处是否有缓冲区正在填满?我还需要做些什么来确保所有数据都得到传输吗?

我的发件人和收件人代码如下:

发件人:

  try {

DataOutputStream d = new DataOutputStream(new BufferedOutputStream(mmOutStream,buffer.length+8));
//int b= buffer.length;
d.writeInt(buffer.length);
d.writeInt(command);

d.write(buffer);
d.flush();

} catch (IOException e) {
Log.e(TAG, "Exception during write", e);
}
}

接收者:

 try {

// Read from the InputStream
int messageSize= inStream.readInt();
int messageCode = inStream.readInt();
bytes=0;
buffer =new byte[messageSize];
while(bytes < messageSize)
{
bytes += inStream.read(buffer,bytes,messageSize - bytes);

}
message = bytes;
} catch (IOException e) {
Log.e(TAG, "disconnected", e);
connectionLost();
break;
}

最佳答案

在我这边进行了更多测试后,我将发送代码更改为如下所示:

for(int i=0; i<buffer.length;i+=BIG_NUM)
{
int b = ((i+BIG_NUM) < buffer.length) ? BIG_NUM: buffer.length - i;
d.write(buffer,i,b);
d.flush();
}

文件现在已发送。有谁知道为什么?对 flush() 的调用是否会阻塞,直到数据实际传输完毕?是否有任何关于发送和接收缓冲区大小的文档可以帮助我确定我可以安全地制作多大的 BIG_NUM

关于android - 在 Android Gingerbread 上通过蓝牙传输大量数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8098713/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com