Maison > développement back-end > Golang > Différence entre le flux de sortie de la console et le flux de fichiers multimédias

Différence entre le flux de sortie de la console et le flux de fichiers multimédias

WBOY
Libérer: 2024-02-08 23:15:09
avant
537 Les gens l'ont consulté

Différence entre le flux de sortie de la console et le flux de fichiers multimédias

La différence entre le flux de sortie de la console et le flux de fichiers multimédias est un concept important dans le développement de programmes. Le flux de sortie de la console est principalement utilisé pour générer des informations pendant l'exécution du programme sur la console afin de permettre aux développeurs de déboguer et d'afficher les résultats en cours d'exécution. Le flux de fichiers multimédias est utilisé pour lire et écrire des fichiers multimédias, tels que l'audio, la vidéo, etc. Il existe certaines différences dans les scénarios d'utilisation, de traitement des données et d'application entre les deux. Il est très important que les développeurs comprennent et maîtrisent ces différences. Nous explorerons ensuite en détail les différences et les conseils d’utilisation entre les deux.

Contenu de la question

J'ai du mal à essayer de restituer un GIF dans Go. Le fichier GIF de sortie ne peut pas être ouvert à l'aide d'une méthode, mais peut être ouvert normalement à l'aide d'une autre méthode. J'ai trouvé Rendering .gif dans Go mais cela n'a pas résolu mon problème spécifique.

Voici le code en question :

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)
    }
}
Copier après la connexion

Voici les commandes :

go build main.go
Copier après la connexion
main > out.gif
Copier après la connexion

Ensuite, out.gif ne peut pas être ouvert. Mais cette méthode fonctionne très bien :

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

}
Copier après la connexion

Je ne comprends pas pourquoi la première méthode ne crée pas un fichier GIF fonctionnel, alors que la deuxième méthode le fait. Est-ce lié à la façon dont Go gère l'écriture ou la mise en mémoire tampon des fichiers ?

Solution de contournement

Selon @CeriseLimón Remarque  :

func main() {
    w := bufio.NewWriter(os.Stdout)
    lissajous(w)
    w.Flush()
}
Copier après la connexion

Expliquez la dernière question

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:stackoverflow.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal