J2ME,InputStream在通过蓝牙接收40K数据后挂起

时间:2009-11-18 11:43:28

标签: java vb.net java-me bluetooth

在通过蓝牙从PC向我的手机(N73)发送数据时,输入流似乎挂断了。 InputStream派生自StreamConnection。

PC软件内置于VB.net。 Java ME中的移动。

在读取大块数据时,InputStream是否有一个需要清空的内部缓冲区? 数据以10Kb到15Kb的范围被接收,并且在接收到第3个块之后读取停止。 奇怪的是,我没有收到任何例外。

我浏览了InputStream类API文档,找不到任何InputStream clear或empty方法。 只有一个reset()方法,我不知道它用于什么?

1 个答案:

答案 0 :(得分:3)

InputStream.reset()是一种方法,在使用Inpustream.mark()强制InputStream创建一个允许您多次读取相同数据的内部缓冲区后,有时会调用此方法,假设InputStream支持它在致电InputStream.markSupported()时返回true。

就数据传输问题而言,我们谈论的是在Symbian OS 9.1之上运行Series60第3版的手机。考虑到JSR-82的Symbian测试有多广泛,一个简单的实现错误就像对InputStream的40k限制一样简单。

如果服务器以低得多的比特率发送较小的块,手机的行为是否会改变? 手机是否在阅读之前处理了收到的数据? MIDlet还在做什么?即使在蓝牙InputStream阻塞之后,其他所有工作都按预期工作吗?

我确实记得JSR-82实现中一个相当重要的错误,它可能只是在创建初始N73固件之后才修复:在任何事件调度线程中都不要使用蓝牙(不是来自任何方法,如{{1 }},MIDlet.startApp()Canvas.keyPressed()CommandListener.commandAction() ...)。

最好只使用自己编写的PlayerListener.playerUpdate()方法中的蓝牙。