zoukankan      html  css  js  c++  java
  • go 语言file Seek( )函数用法

    原文: https://studygolang.com/articles/2271

    package main
    
    import (
      "fmt"
      "strings"
      "log"
    )
    
    func main() {
    
      reader := strings.NewReader("Go语言学习园地")
      reader.Seek(2, 0)
      r, _, _ := reader.ReadRune()
      fmt.Printf("%c
    ", r)
      str := "Go语言学习园地"
      log.Println([]byte(str))
    }
    

      --------------------

    读者是否发现,其实ReaderFrom和WriterTo接口的方法接收的参数是io.Reader和io.Writer类型。根据io.Reader和io.Writer接口的讲解,对该接口的使用应该可以很好的掌握。

    这里只提供简单的一个示例代码:将一段文本输出到标准输出

    reader := bytes.NewReader([]byte("Go语言学习园地"))
    reader.WriteTo(os.Stdout)

    通过io.ReaderFrom和io.WriterTo的学习,我们知道,如果这样的需求,可以考虑使用这两个接口:“一次性从某个地方读或写到某个地方去。”

    ## Seeker接口 ##

    接口定义如下:

    type Seeker interface {
    	Seek(offset int64, whence int) (ret int64, err error)
    }
    


    官方文档中关于该接口方法的说明:

    > Seek 设置下一次 Read 或 Write 的偏移量为 offset,它的解释取决于 whence: 0 表示相对于文件的起始处,1 表示相对于当前的偏移,而 2 表示相对于其结尾处。 Seek 返回新的偏移量和一个错误,如果有的话。


    也就是说,Seek方法用于设置偏移量的,这样可以从某个特定位置开始操作数据流。听起来和ReaderAt/WriteAt接口有些类似,不过Seeker接口更灵活,可以更好的控制读写数据流的位置。

    简单的示例代码:获取倒数第二个字符(需要考虑UTF-8编码,这里的代码只是一个示例

    -------------

    **小贴士**

    whence的值,在os包中定义了相应的常量,应该使用这些常量

    const (
    SEEK_SET int = 0 // seek relative to the origin of the file
    SEEK_CUR int = 1 // seek relative to the current offset
    SEEK_END int = 2 // seek relative to the end
    )

    ## Closer接口 ##

    接口定义如下:

    type Closer interface {
    	Close() error
    }


    该接口比较简单,只有一个Close()方法,用于关闭数据流。

  • 相关阅读:
    BZOJ 3208: 花神的秒题计划Ⅰ
    BZOJ 3207: 花神的嘲讽计划Ⅰ
    BZOJ 2732: [HNOI2012]射箭
    BZOJ 3165: [Heoi2013]Segment
    BZOJ 3626: [LNOI2014]LCA
    2017 01 16 校内小测 ZXR专场
    BZOJ 3101: N皇后
    BZOJ 1106: [POI2007]立方体大作战tet
    BZOJ 2084: [Poi2010]Antisymmetry
    【UOJ#228】基础数据结构练习题 线段树
  • 原文地址:https://www.cnblogs.com/oxspirt/p/14690706.html
Copyright © 2011-2022 走看看