在通过蓝牙从 PC 向我的手机 (N73) 发送数据时,输入流似乎挂断了。 InputStream 派生自 StreamConnection。
PC 软件内置于VB.net。 在 Java ME 中移动。
InputStream 是否有在读取大块数据时需要清空的内部缓冲区? 正在以 10Kb 到 15Kb 范围的 block 接收数据,并且在接收到第 3 个 block 后停止读取。 奇怪的是,我没有收到任何异常(exception)情况。
我浏览了 InputStream 类 API 文档,找不到任何 InputStream clear 或 empty 方法。 只有一个reset()方法,不知道有什么用?
最佳答案
InputStream.reset()
是您在使用 Inpustream.mark()
强制 InputStream 创建一个内部缓冲区之后调用的方法多次读取相同的数据,假设 InputStream 通过在调用 InputStream.markSupported()
时返回 true 来支持它。
至于数据传输问题,我们讨论的是在 Symbian OS 9.1 上运行 Series60 第三版的手机。考虑到 JSR-82 的 Symbian 测试有多广泛,像 InputStream 上的 40k 限制这样简单的实现错误似乎不太可能。
如果服务器以低得多的比特率发送较小的数据 block ,手机的行为会发生变化吗?
手机在读取更多数据之前是否处理接收到的数据?
MIDlet 还做什么?即使在蓝牙 InputStream 阻塞之后,其他一切是否都按预期工作?
我确实记得 JSR-82 实现中的一个相当重要的错误,它可能只有在创建初始 N73 固件后才被修复:在任何事件调度线程中根本不使用蓝牙(不是来自 之类的任何方法) MIDlet.startApp()
, Canvas.keyPressed()
, CommandListener.commandAction()
, PlayerListener.playerUpdate()
.. .).
最好只在您自己编写的 Thread.run()
方法中使用蓝牙。
关于java - J2ME,InputStream 在通过蓝牙接收到 40K 数据后挂断,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1755457/