- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我只是想通过蓝牙套接字写入和读取,但我的 readBytes 调用没有完成。我认为这很简单,但也许我只是使用了错误类型的流或其他东西。截至目前,我的代码只是以字节形式发送少量文本。这是占位符代码,将替换为通过流写入和读取文件的代码。这是我的接收线程:
class ReceiveThread(val inStream:BufferedInputStream):Thread() {
var bytes:ByteArray? = null
override fun run() {
BluetoothService.log("Begin ${BTS_Constants.THREAD_RECEIVE}")
BluetoothService.log("preparing to read data")
name = BTS_Constants.THREAD_RECEIVE
//here is my new code
inStream.use {
do{
count++
BluetoothService.log("read loop round $count")
byteList.add(it.read() as Byte)
}while (it.available()>0)
}
BluetoothService.log("data read: ${byteList.get(0) as Char}")
}
}
这是我的发送线程:
class SendThread(val outStream:BufferedOutputStream, val file:File? = null):Thread(){
var bytes:ByteArray? = null
override fun run() {
BluetoothService.log("Begin : ${BTS_Constants.THREAD_SEND}")
name = BTS_Constants.THREAD_SEND
bytes = "hello testing".toByteArray()
try{
outStream.use {
it.write(bytes)
it.flush()
}
}catch (ioe:IOException){
}
BluetoothService.log("data sent")
}
}
数据已成功发送,BluetoothService.log("data sent")
调用已到达并显示在运行发送线程的设备的 logcat 中。对于运行接收线程的设备,记录“准备读取数据”消息,但从不记录 data read: "$bytes message"
。
如何完成对 inStream.readBytes() 的调用?
编辑:我收到的新错误消息:
11-27 23:45:29.298 16253-16413/com.example.zemcd.fileblue E/AndroidRuntime: FATAL EXCEPTION: RECEIVE
Process: com.example.zemcd.fileblue, PID: 16253
java.io.IOException: bt socket closed, read return: -1
at android.bluetooth.BluetoothSocket.read(BluetoothSocket.java:588)
at android.bluetooth.BluetoothInputStream.read(BluetoothInputStream.java:96)
at java.io.BufferedInputStream.fill(BufferedInputStream.java:235)
at java.io.BufferedInputStream.read(BufferedInputStream.java:254)
at com.example.zemcd.fileblue.ReceiveThread.run(BluetoothService.kt:230)
最佳答案
如果您查看 Kotlin 扩展函数的源代码 readBytes
您会看到它在 InputStream.read(buffer) > 0
时开始循环。根据documentation :
This method blocks until input data is available, end of file is detected, or an exception is thrown.
此循环的第二次迭代会卡住您的程序。所以不要使用方法readBytes
。只需读取(缓冲区)
。例如 - https://developer.android.com/guide/topics/connectivity/bluetooth.html#ManagingAConnection
更新:
现在 ReceiveThread
可以从流中接收一条消息。但是你的蓝牙 socket 很近。所以你的问题是在设置蓝牙连接和 inStream
的初始化。也许你也有错误的发送部分。
关于android - Kotlin readBytes() 永远不会完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47524148/
有什么区别: AContext.Socket.ReadBytes(...); vs AContext.IOHandler.ReadBytes(...); 它们的工作原理一样吗?或者可能是 IOHan
如果客户端突然断开连接并引发 EOF 异常,则以下循环似乎会阻塞整个服务器应用程序: String a = ""; int amount = 1; while(((cr = streamIn.read
我正在创建一个 Chip-8 模拟器,它要求您以字节为单位读取虚拟 ROM 文件。我有这段代码正在调用 readByte 方法。如果您查看打印出来的值,其中一些是常规字节,而另一些则非常大。 最佳答案
我的代码看起来像这样: void decodeFragment(ByteBuf fragment) { fragment.readByte(); ... } void decodeMe
我是一名 C# 初学者,正在尝试读取二进制文件中的符号。我在 c# 中使用 ReadByte() 以唯一参数读取了这个二进制文件。通过这样做 using(var stream = new Binary
我只是想通过蓝牙套接字写入和读取,但我的 readBytes 调用没有完成。我认为这很简单,但也许我只是使用了错误类型的流或其他东西。截至目前,我的代码只是以字节形式发送少量文本。这是占位符代码,将替
我的客户端接收字符串,其中字符串的前 4 个字符定义消息的长度。 示例字符串:0034PDCS00001700kg00000000kg00001700kg 消息长度为34 消息是PDCS0000170
我继承了一些循环通过 BinaryReader 的响应的代码,并且它在一段时间内工作正常(返回 2 个字节),但是客户端需要一段时间才能响应(我假设)并且代码失败进入捕获逻辑。 我找不到任何关于 Re
根据 the documentation for readBytes() (在 Qt 5.4 的 QDataStream 中),我希望以下代码将 input_array 复制到新分配的内存中,并将 r
我试图了解 bufio ReadBytes 在接收大数据包时的行为。我在 MTU=9001 的 unix 机器的 eth0 上运行一个简单的 Golang TCP 服务器。客户端是一台单独的机器(没有
我在尝试使用 ByteArrays 通过 Socket 发送对象和 unsigned int 时遇到了一个奇怪的问题。我正在尝试处理我可能会收到多个数据包中的数据的情况。 这是我的套接字数据处理程序:
我有此监听器功能,可在网络上监听来自其对等方的消息。 它必须在一定时间内可以正常工作,但是当它同时接收到两条消息时,出现以下错误: “💬消息解码错误-缓冲区中有多余数据” 可以将其修改为同时允许多消
The default implementation on Stream creates a new single-byte array and then calls Read. While this
当我在 Arduino 上执行此操作时: const unsigned long baudrate = 57600; const int TledPin = 13; //---------------
我正在查看创建线程来处理每个传入连接的服务器的代码。问题是由于某种原因在一堆线程上,从套接字创建的 DataInputStream 卡在 readByte 上并且没有抛出任何异常。超时设置为 60 秒
编辑:我发现了问题。 我的对象的构造函数正在以写入模式初始化文件流,无论我们是否要加密或解密文件。即使写入文件流在解密之前会被关闭(用于此目的的另一个文件流),它仍然会导致静默崩溃。现在它工作正常。
这是我的 Java 代码: /* * To change this template, choose Tools | Templates * and open the template in th
如果我们创建一个 HttpWebRequest 并从它的响应中获取 ResponseStream ,那么数据是否会立即完全下载,或者当我们调用流的 ReadBytes 时,只有数据会从网络下载然后读取
这个问题在这里已经有了答案: MemoryStream: why convert to byte after readByte (3 个答案) 关闭 7 年前。 我花了一些时间研究 System.I
在我在线阅读的关于 SerialPorts 的所有示例代码中,所有示例代码都使用 ReadByte,然后转换为 Character,而不是首先使用 ReadChar。 这样做有好处吗? 最佳答案 Se
我是一名优秀的程序员,十分优秀!