Rumah >pembangunan bahagian belakang >Golang >Perbezaan antara aliran keluaran konsol dan aliran fail media

Perbezaan antara aliran keluaran konsol dan aliran fail media

WBOY
WBOYke hadapan
2024-02-08 23:15:09538semak imbas

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)
    }
}

Berikut adalah arahan:

go build main.go
main > out.gif

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()

}

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()
}

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!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam