美文网首页
像操作slice一样操作文件

像操作slice一样操作文件

作者: guonaihong | 来源:发表于2019-03-31 22:08 被阅读0次

现在有大文件,大约1GB。想打印第2w-3w字节的数据。
如果你能想到一下子比读到内存更好的办法,就不用看这篇文章了。

  • 一段不明所以的代码
  • 真正的英雄函数
  • 留下疑问
  • github 完整代码
一段不明所以的代码
func sliceFile(rs io.ReadSeeker, w io.Writer, start, end int) error {
    if start < 0 {
        return fmt.Errorf("invalid start argument: %d", start)
    }

    if end < 0 {
        return fmt.Errorf("invalid end argument: %d", end)
    }

    if end < start {
        return fmt.Errorf("invalid start:end argument: [%d, %d]", start, end)
    }

       //
    _, err := rs.Seek(int64(start), 0)
    if err != nil {
        return err
    }

    canRead := end - start

    // buf大小可以调整,为了测试方便调小一点
    readBuf := make([]byte, 8)
    for canRead > 0 {
        needRead := len(readBuf)
        if needRead > canRead {
            needRead = canRead
        }

        n, err := rs.Read(readBuf[:needRead])
        if err != nil {
            break
        }
        w.Write(readBuf[:n])
        canRead -= n
    }
    return nil
}
  
真正的英雄函数

请看第一个注释下面的函数,就是它。

疑问

普通文件用上面的函数可以使用,如果输入是os.Stdin怎么办?

github代码示例

file-slice

后记

在用golang实现linux head 和 tail命令有感而发。感兴趣的可以移步观看
coreutils这个项目,目前已经是全github最全的,用golang语言重写linux 命令项目

相关文章

  • 像操作slice一样操作文件

    现在有大文件,大约1GB。想打印第2w-3w字节的数据。如果你能想到一下子比读到内存更好的办法,就不用看这篇文章了...

  • golang append

    append属于内置函数,用于 slice 的元素添加操作。 slice在操作时需要注意:slice底层指向一个数...

  • Python高级特性-1

    切片(Slice) 对经常取指定索引范围的操作,需要用循环的操作,Python提供了切片(Slice)操作符,能大...

  • 高级特性

    1.切片(Slice)# python提供了切片(Slice)操作符,能大大简化取数据操作L = ['aa','b...

  • [python基础]-10 高级特性-切片操作

    1.切片操作(slice) 在python中可以对字符串、列表、元祖三种数据类型进行切片(slice)操作,切片的...

  • Go 数组与 切片的区别

    1.使用方式 数组和slice长的很像,操作方式也都差不多,并且slice包含了数组的基本的操作方式,如下标、ra...

  • JavaScript获取数组的片段

    JavaScript中数组的常用操作之获取数组的片段 Array.slice() 方法 Array.slice([...

  • study_go_day5 slice map

    package main import "fmt" //slice操作 func sliceStudy() { s...

  • golang 基础(15)slice 的操作

    slice 的操作 slice 添加元素 从输出接口来看 arr 还是保持原有长度,从 s3 开始以后 slice...

  • Hive系列之HSQL转换成MapReduce过程

    hive的库、表等数据实际是hdfs系统中的目录和文件,让开发者可以通过sql语句, 像操作关系数据库一样操作文件...

网友评论

      本文标题:像操作slice一样操作文件

      本文链接:https://www.haomeiwen.com/subject/nghpbqtx.html