Golang의 io 패키지에 대한 자세한 설명(6): 일반적으로 사용되는 내보내기 기능에 대한 자세한 설명

i.복사

func Copy(dst Writer, src Reader) (written int64, err error)

io.Reader 또는 io.Writer 간에 데이터를 복사하는 데 사용되며 Writer 및 Reader라는 두 매개변수를 허용합니다. 판독기에서 더 이상 데이터를 읽을 수 없거나 오류가 발생할 때까지 판독기에서 데이터를 읽고 기록기에 씁니다(EOF). 복사된 바이트 수와 발생한 오류 메시지를 반환합니다. 간단한 사용 예는 다음과 같습니다.

package main

import (
	"fmt"
	"io"
	"os"
)

func main() {
	src, err := os.Open("src.txt")
	if err != nil {
		panic(err)
	}
	defer src.Close()

	dst, err := os.Create("dst.txt")
	if err != nil {
		panic(err)
	}
	defer dst.Close()

	written, err := io.Copy(dst, src)
	if err != nil {
		panic(err)
	}
	fmt.Printf("Copied %d bytes\n", written)
}

i.CopyBuffer

func CopyBuffer(dst Writer, src Reader, buf []byte) (written int64, err error)

io.Reader와 io.Writer 사이에서 데이터를 버퍼링하고 복사하는 데 사용되며, io.Copy 함수와 달리 버퍼 크기는 io.CopyBuffer를 사용하여 수동으로 제어할 수 있습니다. buf가 nil이면 하나가 할당되고 길이가 0이면 패닉이 발생합니다. io.CopyBuffer는 고정된 크기의 버퍼를 사용할 수 있기 때문에 io.Copy가 가질 수 있는 큰 메모리 사용 문제를 방지하여 메모리 사용을 더 잘 제어하고 성능을 향상시킬 수 있습니다. 간단한 사용 예는 다음과 같습니다.

package main

import (
	"fmt"
	"io"
	"os"
)

func main() {
	src, err := os.Open("src.txt")
	if err != nil {
		panic(err)
	}
	defer src.Close()

	dst, err := os.Create("dst.txt")
	if err != nil {
		panic(err)
	}
	defer dst.Close()

	buf := make([]byte, 4)
	written, err := io.CopyBuffer(dst, src, buf)
	if err != nil {
		panic(err)
	}
	fmt.Printf("Copied %d bytes\n", written)
}

io.CopyN

func CopyN(dst Writer, src Reader, n int64) (written int64, err error)

io.Reader에서 지정된 바이트 수를 읽고 io.Writer에 쓰는 데 사용됩니다. io.Copy 함수와 달리 소스 io.Reader에서 n 바이트를 읽어 대상 io.Writer에 쓰고 소스에서 지정된 바이트 수만큼 읽은 후 중지합니다. 간단한 사용 예는 다음과 같습니다.

package main

import (
	"fmt"
	"io"
	"os"
)

func main() {
	src, err := os.Open("file.txt")
	if err != nil {
		panic(err)
	}
	defer src.Close()

	dst, err := os.Create("dst.txt")
	if err != nil {
		panic(err)
	}
	defer dst.Close()

	written, _ := io.CopyN(dst, src, 5)
	fmt.Printf("Copied %d bytes\n", written)
}

io.LimitReader

func LimitReader(r Reader, n int64) Reader

io.Reader에서 데이터를 읽고 최대 n바이트를 반환합니다. 데이터를 읽을 때 이 제한에 일찍 도달하면 io.Reader는 io.EOF 오류를 반환합니다(스트림의 끝을 읽었음을 나타냄). 간단한 사용 예는 다음과 같습니다.

package main

import (
	"fmt"
	"io"
	"strings"
)

func main() {
	data := "Hello, World!"
	reader := strings.NewReader(data)
	limit := int64(5)
	limitedReader := io.LimitReader(reader, limit)
	buf := make([]byte, limit)
	limitedReader.Read(buf)
	fmt.Printf("%s\n", buf) // 输出: Hello
}

i.ReadAll

func ReadAll(r Reader) ([]byte, error)

읽는 데이터의 크기를 제한하지 않고 지정된 io.Reader의 모든 데이터를 읽는 데 사용됩니다. 간단한 사용 예는 다음과 같습니다.

package main

import (
	"fmt"
	"io"
	"strings"
)

func main() {
	r := strings.NewReader("路多辛的博客,分享后端领域知识与经验")
	b, err := io.ReadAll(r)
	if err != nil {
		panic(err)
	}
	fmt.Println(string(b))
}

io.ReadAtLeast

func ReadAtLeast(r Reader, buf []byte, min int) (n int, err error)

io.Reader에서 최소한 지정된 수의 바이트를 읽는 데 사용되며, io.Reader에서 최소한 최소 바이트를 읽으려고 시도합니다. 데이터가 충분하지 않으면 요청한 수를 읽을 수 없다는 오류를 반환합니다. 바이트. 간단한 사용 예는 다음과 같습니다.

package main

import (
	"fmt"
	"io"
	"log"
	"strings"
)

func main() {
	r := strings.NewReader("路多辛的博客,分享后端领域知识与经验")
	buf := make([]byte, 18)
	if _, err := io.ReadAtLeast(r, buf, 6); err != nil {
		log.Fatal(err)
	}
	fmt.Printf("%s\n", buf)


	shortBuf := make([]byte, 3)
	if _, err := io.ReadAtLeast(r, shortBuf, 4); err != nil {
		fmt.Println("error:", err)
	}


	longBuf := make([]byte, 64)
	if _, err := io.ReadAtLeast(r, longBuf, 64); err != nil {
		fmt.Println("error:", err)
	}
}

io.ReadFull

func ReadFull(r Reader, buf []byte) (n int, err error)

io.Reader에서 buf로 len(buf) 바이트를 읽는 데 사용됩니다. 데이터가 부족하면 요청한 바이트 수를 읽을 수 없다는 오류가 반환됩니다. 간단한 사용 예는 다음과 같습니다.

package main

import (
	"fmt"
	"io"
	"strings"
)

func main() {
	r := strings.NewReader("路多辛的博客,分享后端领域知识与经验")

	buf := make([]byte, 18)
	if _, err := io.ReadFull(r, buf); err != nil {
		panic(err)
	}
	fmt.Println(string(buf))

	longBuf := make([]byte, 64)
	if _, err := io.ReadFull(r, longBuf); err != nil {
		panic(err)
	}
}

Supongo que te gusta

Origin blog.csdn.net/luduoyuan/article/details/131177611
Recomendado
Clasificación