transport.go 677 B

12345678910111213141516171819202122232425262728293031323334
  1. package net
  2. import (
  3. "io"
  4. )
  5. const (
  6. bufferSize = 4 * 1024
  7. )
  8. // ReaderToChan dumps all content from a given reader to a chan by constantly reading it until EOF.
  9. func ReaderToChan(stream chan<- []byte, reader io.Reader) error {
  10. for {
  11. buffer := make([]byte, bufferSize)
  12. nBytes, err := reader.Read(buffer)
  13. if nBytes > 0 {
  14. stream <- buffer[:nBytes]
  15. }
  16. if err != nil {
  17. return err
  18. }
  19. }
  20. }
  21. // ChanToWriter dumps all content from a given chan to a writer until the chan is closed.
  22. func ChanToWriter(writer io.Writer, stream <-chan []byte) error {
  23. for buffer := range stream {
  24. _, err := writer.Write(buffer)
  25. if err != nil {
  26. return err
  27. }
  28. }
  29. return nil
  30. }