如何扫描大型Scala数组[Byte]中的各个字符?

如何扫描大型Scala数组[Byte]中的各个字符?,scala,Scala,我有一个非常大的数组[字节],我想扫描特定的字符。让我们假设编码是UTF-8。我基本上希望查找特定的字符,并将数组的片段转换为(子)字符串以解析单个JSON对象。我不希望从数组[Byte]中生成一个ginormous字符串。我希望在数组中找到很多小的JSON对象。并非所有对象都具有相同的键/值对。我只对一些具有感兴趣的键/值的对象感兴趣。我知道如何将数组[字节]转换为字符串,但我不知道如何增量或逐段转换。您正在寻找的 有错误条件等等,但无论如何,这应该给你一个增量解码的开始 请注意,这是一个通用

我有一个非常大的数组[字节],我想扫描特定的字符。让我们假设编码是UTF-8。我基本上希望查找特定的字符,并将数组的片段转换为(子)字符串以解析单个JSON对象。我不希望从数组[Byte]中生成一个ginormous字符串。我希望在数组中找到很多小的JSON对象。并非所有对象都具有相同的键/值对。我只对一些具有感兴趣的键/值的对象感兴趣。我知道如何将数组[字节]转换为字符串,但我不知道如何增量或逐段转换。

您正在寻找的

有错误条件等等,但无论如何,这应该给你一个增量解码的开始

请注意,这是一个通用算法,可用于Java识别的任何编码。如果采用特定编码(UTF-8、UTF-16),则可以创建较少的通用代码



仅供参考,由于您提到使用非常类似的代码对注释进行流式处理,因此我希望
枚举[[Array[Byte],Array[Char]]
用于将非阻塞字节流增量转换为非阻塞字符流的播放框架。

如果您必须扫描整个内容,为什么不想将其转换为一个巨大的字符串?无论如何,您都会这样做。@wheaties可能我可以拥有数组[字节]这是唯一的原因。如果您将代码转换为字符串,则代码可能会简单得多,因为否则您无法使用正则表达式,甚至无法使用内置于
string
中的简单文本搜索,而且如果您处理的是UTF-8,则一个字符可能会跨多个字节。
ByteArrayInputStream
谢谢大家。你们的观点非常正确,我有一个只使用字符串的实现。太棒了!谢谢@PaulDraper,这正是我想要的。
import java.nio.{ByteBuffer, CharBuffer}
import java.nio.charset.StandardCharsets

val bytes: Array[Byte] = ...

val charset = StandardCharserts.UTF_8
val decoder = charset.newDecoder

// decode 1KB
val byteBuffer = ByteBuffer.wrap(bytes, 0, 1024)
val charBuffer = CharBuffer.allocate((int)(charset.averageCharsPerByte * 1024 + 1))
decoder.decode(byteBuffer, charBuffer, false)

// the first byteBuffer.position() bytes have been decoded
// as charBuffer.position() characters, which can be converted to
// a String via charBuffer.toString()