code: func NewDataFileWriter(output io.Writer, schema Schema, datumWriter DatumWriter) (writer *DataFileWriter, err error) {
  	encoder := NewBinaryEncoder(output)
  	datumWriter.SetSchema(schema)
  	sync := []byte("1234567890abcdef") // TODO come up with other sync value
  
  	header := &objFileHeader{
  		Magic: magic,
  		Meta: map[string][]byte{
  			schemaKey: []byte(schema.String()),
  			codecKey:  []byte("null"),
  		},
  		Sync: sync,
  	}
  	headerWriter := NewSpecificDatumWriter()
  	headerWriter.SetSchema(objHeaderSchema)
  	if err = headerWriter.Write(header, encoder); err != nil {
  		return
  	}
  	blockBuf := &bytes.Buffer{}
  	writer = &DataFileWriter{
  		output:      output,
  		outputEnc:   encoder,
  		datumWriter: datumWriter,
  		sync:        sync,
  		blockBuf:    blockBuf,
  		blockEnc:    NewBinaryEncoder(blockBuf),
  	}
  
  	return
  }
docs: // NewDataFileWriter creates a new DataFileWriter for given output and schema using the given DatumWriter to write the data to that Writer.
  // May return an error if writing fails.