# File lib/net/sftp/protocol/04/attributes.rb, line 172
    def to_s
      flags = 0

      flags |= F_SIZE if @size
      flags |= F_OWNERGROUP if @owner && @group
      flags |= F_PERMISSIONS if @permissions
      flags |= F_ACCESSTIME if @atime
      flags |= F_CREATETIME if @ctime
      flags |= F_MODIFYTIME if @mtime
      if @atime_nseconds && @ctime_nseconds && @mtime_nseconds
        flags |= F_SUBSECOND_TIMES
      end
      flags |= F_ACL if @acl
      flags |= F_EXTENDED if @extended

      buffer = buffers.writer
      buffer.write_long flags
      buffer.write_byte @type
      buffer.write_int64 @size if @size
      buffer.write_string @owner, @group if @owner && @group
      buffer.write_long @permissions if @permissions

      if @atime
        buffer.write_int64 @atime
        buffer.write_long @atime_nseconds if ( flags & F_SUBSECOND_TIMES != 0 )
      end
      if @ctime
        buffer.write_int64 @ctime
        buffer.write_long @ctime_nseconds if ( flags & F_SUBSECOND_TIMES != 0 )
      end
      if @mtime
        buffer.write_int64 @mtime
        buffer.write_long @mtime_nseconds if ( flags & F_SUBSECOND_TIMES != 0 )
      end

      if @acl
        acl_buf = buffers.writer
        acl_buf.write_long @acl.length
        @acl.each do |item|
          acl_buf.write_long item.type, item.flag, item.mask
          acl_buf.write_string item.who
        end
        buffer.write_string acl_buf.to_s
      end

      if @extended
        buffer.write_long @extended.length
        @extended.each { |k,v| buffer.write_string k, v }
      end

      buffer.to_s
    end