gpt4 book ai didi

scala - akka.io 在 2.3 中逐行接收

转载 作者:可可西里 更新时间:2023-11-01 02:42:37 24 4
gpt4 key购买 nike

我正在使用 Akka 2.3(因为这是 Play 附带的版本)并且想连接到某个 TCP 套接字。我知道 akka.io 包。但是,我看不到任何方法可以将接收到的数据作为 UTF-8 字符串逐行处理(反对只接收字节 block )。

在网上搜索时,有很多对 Akka 2.2 的实验性 Pipeline API 的引用。然而,这个 API 在 Akka 中又被删除了。

我正在寻找的是在大多数缓冲区类中称为 readLine 的内容,但对于 Akka I/O Framework。

最佳答案

Akka Stream看起来很有希望,但是由于它仍未发布,我决定通过简单地联系缓冲区中的所有数据并等待分隔符来自己实现它。

  private val separatorBytes = // like CRLF
private var buffer = ByteString.empty
private var nextPossibleMatch = 0

// when receiving chunks of bytes they are appended to buffer and doParseLines is executed

private def doParseLines(parsedLinesSoFar: Vector[String] = Vector()): Vector[String] = {
val possibleMatchPos = buffer.indexOf(separatorBytes.head, from = nextPossibleMatch)
if (possibleMatchPos == -1) {
parsedLinesSoFar
} else {
if (possibleMatchPos + separatorBytes.size > buffer.size) {
nextPossibleMatch = possibleMatchPos
parsedLinesSoFar
} else {
if (buffer.slice(possibleMatchPos, possibleMatchPos + separatorBytes.size) == separatorBytes) {
// Found a match
val parsedLine = buffer.slice(0, possibleMatchPos).utf8String
buffer = buffer.drop(possibleMatchPos + separatorBytes.size)
nextPossibleMatch -= possibleMatchPos + separatorBytes.size
doParseLines(parsedLinesSoFar :+ parsedLine)
} else {
nextPossibleMatch += 1
doParseLines(parsedLinesSoFar)
}
}
}
}

关于scala - akka.io 在 2.3 中逐行接收,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30467411/

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