Perbezaan antara aliran keluaran konsol dan aliran fail media

WBOY
Lepaskan: 2024-02-08 23:15:09
ke hadapan
511 orang telah melayarinya

Perbezaan antara aliran keluaran konsol dan aliran fail media

Perbezaan antara aliran keluaran konsol dan aliran fail media adalah konsep penting dalam pembangunan program. Aliran keluaran konsol digunakan terutamanya untuk mengeluarkan maklumat semasa program berjalan ke konsol untuk memudahkan pembangun menyahpepijat dan melihat hasil yang sedang dijalankan. Aliran fail media digunakan untuk membaca dan menulis fail media, seperti audio, video, dsb. Terdapat beberapa perbezaan dalam senario penggunaan, pemprosesan data dan aplikasi antara kedua-duanya Adalah sangat penting bagi pembangun untuk memahami dan menguasai perbezaan ini. Seterusnya kita akan meneroka perbezaan dan petua penggunaan antara keduanya secara terperinci.

Kandungan soalan

Saya menghadapi masalah cuba memaparkan GIF dalam Go. Fail GIF output tidak boleh dibuka menggunakan satu kaedah, tetapi boleh dibuka secara normal menggunakan kaedah lain. Saya menemui Rendering .gif dalam Go tetapi ia tidak menyelesaikan masalah khusus saya.

Ini adalah kod yang dimaksudkan:

package main

import (
    "bufio"
    "fmt"
    "image"
    "image/color"
    "image/gif"
    "io"
    "math"
    "math/rand"
    "os"
    "time"
)

var palette = []color.Color{color.White, color.Black}

const (
    whiteIndex = 0
    blackIndex = 1
)

func main() {
    w := bufio.NewWriter(os.Stdout)
    lissajous(w)
}

func lissajous(out io.Writer) {
    const (
        cycles  = 5
        res     = 0.001
        size    = 100
        nframes = 64
        delay   = 8
    )
    rand.Seed(time.Now().UTC().UnixNano())

    freq := rand.Float64() * 3.0
    anim := gif.GIF{LoopCount: nframes}
    phase := 0.0

    for i := 0; i < nframes; i++ {
        rect := image.Rect(0, 0, 2 * size+1, 2 * size + 1)
        img := image.NewPaletted(rect, palette)

        for t := 0.0; t < cycles * 2 * math.Pi; t += res {
            x := math.Sin(t)
            y := math.Sin(t * freq + phase)
            img.SetColorIndex(size + int(x * size + 0.5), size + int(y * size + 0.5), blackIndex)
        }
        phase += 0.1
        anim.Delay = append(anim.Delay, delay)
        anim.Image = append(anim.Image, img)
    }
    err := gif.EncodeAll(out, &anim)
    if err != nil {
        return
    } else {
        fmt.Println(err)
    }
}
Salin selepas log masuk

Berikut adalah arahan:

go build main.go
Salin selepas log masuk
main > out.gif
Salin selepas log masuk

Kemudian, out.gif tidak boleh dibuka. Kaedah ini berkesan walaupun:

func main() {
    fileName := "out.gif"
    f, err3 := os.Create(fileName)
    if err3 != nil {
        fmt.Println("create file fail")
    }
    w := bufio.NewWriter(f) 
    lissajous(w)
    w.Flush()
    f.Close()

}
Salin selepas log masuk

Saya keliru mengapa kaedah pertama tidak mencipta fail GIF berfungsi, tetapi kaedah kedua melakukannya. Adakah ini berkaitan dengan cara Go mengendalikan penulisan atau penimbalan fail?

Penyelesaian

Menurut @CeriseLimón Nota :

func main() {
    w := bufio.NewWriter(os.Stdout)
    lissajous(w)
    w.Flush()
}
Salin selepas log masuk

Jelaskan soalan terakhir

Atas ialah kandungan terperinci Perbezaan antara aliran keluaran konsol dan aliran fail media. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!