一个关于 write interface的小问题

legendlzy · 2017-10-30 03:43:08 · 855 次点击 · 大约8小时之前 开始浏览    置顶
这是一个创建于 2017-10-30 03:43:08 的主题,其中的信息可能已经有所发展或是发生改变。

    //fw, err := os.Create(zName)
    //    if err != nil {
    //        return nil, err
    //    }
    //    defer fw.Close()
    buf := new(bytes.Buffer)
    w := zip.NewWriter(buf)
    defer w.Close()

我使用这两个创建一个write的时候,写出来的zip文件大小差了20多k,然后buf创建的不可用,但是写文件的可用,有大神解决一下吗?


有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

855 次点击  
加入收藏 微博
7 回复  |  直到 2017-10-30 06:12:56
channel
channel · #1 · 7年之前

是不是 buffer 设置有问题,文件很多空洞?

legendlzy
legendlzy · #2 · 7年之前
channelchannel #1 回复

是不是 buffer 设置有问题,文件很多空洞?

文件很多空洞是什么意思?是说空字符吗?我看了一下,两个生成的文件byte前面都是一样的,只是写文件那个多了20k数据,然后少了这20k导致这个zip不能使用

channel
channel · #3 · 7年之前

把写数据的关键代码贴上来

legendlzy
legendlzy · #4 · 7年之前
channelchannel #3 回复

把写数据的关键代码贴上来

        buf := new(bytes.Buffer)
    w := zip.NewWriter(buf)
    defer w.Close()

    f, err := w.Create(fName)
    if err != nil {
        return nil, err
    }
    _, err = f.Write(content) //content为[]byte 文件数据
    if err != nil {
        return nil, err
    }

这个是buffer写

        fw, err := os.Create(zName)
    if err != nil {
        return nil, err
    }
    defer fw.Close()
    w := zip.NewWriter(fw)
    defer w.Close()

    f, err := w.Create(fName)
    if err != nil {
        return nil, err
    }
    _, err = f.Write(content) //content为[]byte数据
    if err != nil {
        return nil, err
    }

这个是写文件

legendlzy
legendlzy · #5 · 7年之前
channelchannel #3 回复

把写数据的关键代码贴上来

"archive/zip"

使用的这个包

legendlzy
legendlzy · #6 · 7年之前
channelchannel #3 回复

把写数据的关键代码贴上来

2017-10-30 11-49-33屏幕截图.png 这个是我生成的两个文件最后多出来的字符,前面的字符我做了比较是全部相同的

legendlzy
legendlzy · #7 · 7年之前
channelchannel #3 回复

把写数据的关键代码贴上来

我知道了,是我close方法用的不对,需要再他写完立刻close就不会有问题

添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传