# File lib/net/sftp/protocol/04/attributes.rb, line 73
    def self.from_buffer( buffer )
      flags = buffer.read_long

      type = buffer.read_byte
      size = buffer.read_int64 if ( flags & F_SIZE ) != 0
      owner = buffer.read_string if ( flags & F_OWNERGROUP ) != 0
      group = buffer.read_string if ( flags & F_OWNERGROUP ) != 0
      permissions = buffer.read_long if ( flags & F_PERMISSIONS ) != 0
      if ( flags & F_ACCESSTIME ) != 0
        atime = buffer.read_int64
        atime_nseconds = buffer.read_long if ( flags & F_SUBSECOND_TIMES ) != 0
      end
      if ( flags & F_CREATETIME ) != 0
        ctime = buffer.read_int64
        ctime_nseconds = buffer.read_long if ( flags & F_SUBSECOND_TIMES ) != 0
      end
      if ( flags & F_MODIFYTIME ) != 0
        mtime = buffer.read_int64
        mtime_nseconds = buffer.read_long if ( flags & F_SUBSECOND_TIMES ) != 0
      end
      if ( flags & F_ACL ) != 0
        acl_buf = buffers.reader( buffer.read_string )
        acl = []
        acl_buf.read_long.times do
          acl << ACL.new( acl_buf.read_long,
                          acl_buf.read_long,
                          acl_buf.read_long,
                          acl_buf.read_string )
        end
      end

      if ( flags & F_EXTENDED ) != 0
        extended = Hash.new
        buffer.read_long.times do
          extended[ buffer.read_string ] = buffer.read_string
        end
      end

      new( type, size, owner, group, permissions, atime, atime_nseconds,
        ctime, ctime_nseconds, mtime, mtime_nseconds, acl, extended )
    end