当我尝试使用 golang 对大文件进行 base64 编码和解码时,我发现原始文件和解码文件之间的字节长度不匹配。


在我的测试文本文件不匹配(1 字节)新行和二进制文件不匹配(2 字节)期间。


什么可能导致这些字节丢失?


package main


import (

    "encoding/base64"

    "io"

    "os"

    "log"

)


func Encode(infile, outfile string) error {

    input, err := os.Open(infile)

    if err != nil {

        return err

    }

    // Close input file

    defer input.Close()


    // Open output file

    output, err := os.Create(outfile)

    if err != nil {

        return err

    }

    // Close output file

    defer output.Close()


    encoder := base64.NewEncoder(base64.StdEncoding, output)

    l, err := io.Copy(encoder, input)

    if err!=nil {

        log.Printf("Failed to encode file:%v",err)

        return err

    } else {

        log.Printf("Wrote %v bytes",l)

    }


    return nil

}


func Decode(infile, outfile string) error {

    input, err := os.Open(infile)

    if err != nil {

        return err

    }

    // Close input file

    defer input.Close()


    // Open output file

    output, err := os.Create(outfile)

    if err != nil {

        return err

    }

    // Close output file

    defer output.Close()


    decoder := base64.NewDecoder(base64.StdEncoding, input)

    l, err := io.Copy(output, decoder)

    if err!=nil {

        log.Printf("Failed to encode file:%v",err)

        return err

    } else {

        log.Printf("Wrote %v bytes",l)

    }


    return nil

}