# File lib/zip/zip_extra_field.rb, line 134
    def merge(binstr)
      return if binstr.empty?
      i = 0 
      while i < binstr.bytesize
        id = binstr[i,2]
        len = binstr[i + 2,2].to_s.unpack("v")[0]
        if id && ID_MAP.member?(id)
          field_name = ID_MAP[id].name
          if self.member?(field_name)
            self[field_name].mergea(binstr[i, len + 4])
          else
            field_obj = ID_MAP[id].new(binstr[i, len + 4])
            self[field_name] = field_obj
          end
        elsif id
          unless self["Unknown"]
            s = ""
            class << s
              alias_method :to_c_dir_bin, :to_s
              alias_method :to_local_bin, :to_s
            end
            self["Unknown"] = s
          end
          if !len || len + 4 > binstr[i..-1].bytesize
            self["Unknown"] << binstr[i..-1]
            break
          end
          self["Unknown"] << binstr[i, len + 4]
        end
        i += len + 4
      end
    end