code: func PrintDelimited(stat *pb.InstructionStat, reader io.Reader, writer io.Writer, delimiter string, lineSperator string) error {
  	return ProcessMessage(reader, func(encodedBytes []byte) error {
  		var row *Row
  		var err error
  		// fmt.Printf("chan input encoded: %s\n", string(encodedBytes))
  		if row, err = DecodeRow(encodedBytes); err != nil {
  			return fmt.Errorf("Failed to decode byte: %v", err)
  		}
  		stat.InputCounter++
  
  		var written = 0
  
  		// fmt.Printf("> len=%d row:%s\n", len(decodedObjects), decodedObjects[0])
  		if written, err = fprintRow(writer, 0, delimiter, row.K...); err != nil {
  			return fmt.Errorf("Failed to write row: %v", err)
  		}
  		if _, err := fprintRow(writer, written, delimiter, row.V...); err != nil {
  			return fmt.Errorf("Failed to write row: %v", err)
  		}
  
  		if _, err := writer.Write([]byte("\n")); err != nil {
  			return fmt.Errorf("Failed to write line separator: %v", err)
  		}
  		stat.OutputCounter++
  		return nil
  	})
  }
docs: // PrintDelimited Reads and formats MessagePack encoded messages
  // with delimiter and lineSeparator.