<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:

def create_from_binary(cls, binary_view):
        '''Creates a new object DataRuns from a binary stream. The binary
        stream can be represented by a byte string, bytearray or a memoryview of the
        bytearray.

        Args:
            binary_view (memoryview of bytearray) - A binary stream with the
                information of the attribute

        Returns:
            DataRuns: New object using hte binary stream as source
        '''
        nw_obj = cls()
        offset = 0
        previous_dr_offset = 0
        header_size = cls._INFO.size #"header" of a data run is always a byte

        while binary_view[offset] != 0:   #the runlist ends with an 0 as the "header"
            header = cls._INFO.unpack(binary_view[offset:offset+header_size])[0]
            length_len = header & 0x0F
            length_offset = (header & 0xF0) >> 4

            temp_len = offset+header_size+length_len #helper variable just to make things simpler
            dr_length = int.from_bytes(binary_view[offset+header_size:temp_len], "little", signed=False)
            if length_offset: #the offset is relative to the previous data run
                dr_offset = int.from_bytes(binary_view[temp_len:temp_len+length_offset], "little", signed=True) + previous_dr_offset
                previous_dr_offset = dr_offset
            else: #if it is sparse, requires a a different approach
                dr_offset = None
            offset += header_size + length_len + length_offset
            nw_obj.data_runs.append((dr_length, dr_offset))
            #nw_obj.data_runs.append(DataRun(dr_length, dr_offset))

        _MOD_LOGGER.debug("DataRuns object created successfully")

        return nw_obj