从bufio中读取文件,通过文件进行半复杂排序

时间:2018-02-02 05:36:05

标签: go

所以可能有这样的问题,但谷歌并不是一件非常简单的事情。基本上我有一个文件,其中一组protobufs编码和排序,因为它们通常来自protobuf规范。

因此,请考虑整个文件中的字节值是这样的:

[EncodeVarInt(protobuf struct的大小)] [protobuf stuct bytes]

因此,您可以一次读取一个字节,用于在我们的protof结构上进行大量读取。

我在文件上使用os ReadAt方法的实现目前看起来像这样。

@Controller
public class IndexController {

    @RequestMapping("/")
    public String index() {
        return "index.html";
    }
}

如何实现像bufio或其他分块阅读机制之类的东西来加速这么多文件的读取?我见过的大多数bufio实现都是针对特定的分隔符。提前谢谢,希望这不是一个可怕的问题。

1 个答案:

答案 0 :(得分:0)

  

Package bufio

import "bufio" 
     

type SplitFunc

     

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