美文网首页
golang读写文件

golang读写文件

作者: 柯蓝_e007 | 来源:发表于2019-05-07 09:02 被阅读0次

    抗压测试的时候多线程需要使用一个文件的内容频繁发送,所以想预处理文件内容到内存
    ,分段发送,
    1.读取文件内容到内存

    type Chunk struct{
        data []byte
    }
    
    func prepareChucks(path string)  {
    
        fi, err := os.Open(path)
        if err != nil {
            panic(err)
        }
        defer fi.Close()
    
        for {
    
            buf := make([]byte, 4096) //每次需要再for循环里面重新make,踩坑
            n, err := fi.Read(buf)
            if err != nil && err != io.EOF {
                panic(err)
            }
            if 0 == n {
                break
            }
            chunckData := Chunk{buf[:n]}
            chuckList.PushBack(chunckData)
        }
    
    }
    

    2.从内存取出消费(只是举例子,这里是重新把内存的分段数据又存储到文件,通过与输入文件二进制比较,可作为验证内存中数据是否正确)

    func writeFile(path string){
    
    
        f, err := os.Create(path )
        defer f.Close()
    
        for e := chuckList.Front(); e != nil; e = e.Next() {
    
            chuckData := e.Value.(Chunk)
    
            _ ,err = f.Write(chuckData.data)
    
            if(err != nil){
                log.Println("writeFile error ..err =",err)
                return
            }
        }
    }
    
    

    3 使用如下

    var chuckList  *list.List
    
    func main() {
    
        chuckList = list.New()
    
        prepareChucks("in file path")
    
        writeFile("out file path")
    
    }
    
    

    相关文章

      网友评论

          本文标题:golang读写文件

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