所以可能有这样的问题,但谷歌并不是一件非常简单的事情。基本上我有一个文件,其中一组protobufs编码和排序,因为它们通常来自protobuf规范。
因此,请考虑整个文件中的字节值是这样的:
[EncodeVarInt(protobuf struct的大小)] [protobuf stuct bytes]
因此,您可以一次读取一个字节,用于在我们的protof结构上进行大量读取。
我在文件上使用os ReadAt方法的实现目前看起来像这样。
@Controller
public class IndexController {
@RequestMapping("/")
public String index() {
return "index.html";
}
}
如何实现像bufio或其他分块阅读机制之类的东西来加速这么多文件的读取?我见过的大多数bufio实现都是针对特定的分隔符。提前谢谢,希望这不是一个可怕的问题。
答案 0 :(得分:0)
import "bufio"
SplitFunc是用于标记化的split函数的签名 输入。参数是剩下的初始子串 未处理的数据和一个标志,atEOF,报告是否是Reader 没有更多数据可供提供。返回值是要的字节数 提前输入和下一个令牌返回给用户,再加上一个 错误,如果有的话。如果数据尚未保存完整的令牌,则 例如,如果在扫描线时没有换行,SplitFunc可以 return(0,nil,nil)表示扫描器读取更多数据 切片并再次使用较长的切片从同一点开始 输入。
如果返回的错误为非零,则扫描停止并且错误为 回到了客户端。
除非atEOF是,否则永远不会使用空数据切片调用该函数 真正。但是,如果atEOF为真,则数据可能是非空的,并且一如既往 保存未处理的文本。
type SplitFunc func(data []byte, atEOF bool) (advance int, token []byte, err error)
使用bufio.Scanner
并编写自定义protobuf结构SplitFunc
。