代码之家  ›  专栏  ›  技术社区  ›  Kevin Boyd

J2ME,通过蓝牙接收40K数据后,输入流挂断

  •  3
  • Kevin Boyd  · 技术社区  · 15 年前

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

    PC软件内置于VB.NET中。 在JAVA ME中移动。

    在读取大数据块时,输入流是否有一个需要清空的内部缓冲区? 数据以10KB到15KB的数据块接收,接收到第三个数据块后,读取停止。 奇怪的是,我没有收到任何例外。

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

    1 回复  |  直到 15 年前
        1
  •  3
  •   michael aubert    15 年前

    InputStream.reset() 是您在使用后某个时间调用的方法 Inpustream.mark() 强制inputstream创建允许多次读取相同数据的内部缓冲区,假定inputstream在调用时通过返回true来支持它。 InputStream.markSupported() .

    至于数据传输问题,我们讨论的是一款在Symbian OS 9.1之上运行60系列第三版的手机。考虑到JSR-82的Symbian测试有多广泛,一个简单的实现bug,比如输入流上的40K限制似乎不太可能。

    如果服务器以更低的比特率发送较小的数据块,手机行为是否会发生变化?
    在读取更多数据之前,手机是否处理接收到的数据?
    Midlet还做什么?即使在蓝牙输入流阻塞之后,其他功能是否也能正常工作?

    我记得在JSR-82实现中有一个非常重要的bug,它可能是在创建了最初的N73固件之后才被修复的:在任何事件中都不要使用蓝牙发送线程(不要使用类似于 MIDlet.startApp() , Canvas.keyPressed() , CommandListener.commandAction() , PlayerListener.playerUpdate() ……)

    你最好只从内部使用蓝牙 Thread.run() 你自己写的方法。