/// <summary>
        /// Disassembles the entire input buffer into Java bytecode instructions, and resolves all operands wen possible.
        /// </summary>
        /// <returns>The list of disassembled instructions.</returns>
        public IList <ByteCodeInstruction> ReadInstructions()
        {
            var result = new ByteCodeInstructionCollection();

            while (_reader.Position < _reader.StartPosition + _reader.Length)
            {
                result.Add(ReadNextInstruction());
            }

            foreach (var instruction in result)
            {
                instruction.Operand = ResolveOperand(result, instruction);
            }

            return(result);
        }