Does a Bitcoin software wallet (not the Bitcoin core wallet) read the entire blockchain to gather balance information? Or does it read the UTXO set? Or some other data source? Does it need to read it every time it wants to retrieve balance information, or does it simply read the last transactions posted to the blockchain?
A full node wallet collects from peers the whole blockchain and uses that data to construct its copy of the UTXO set.
From that it can calculate balances for addresses it has generated.
As it receives new transactions it updates its UTXO set and balances.
A lightweight (SPV) wallet might only collect block header information from configured servers. It will probably only fetch full information for specific transactions that are relevant to it.
The header information can be validated by the lightweight wallet to check that it is not being deceived by a malicious server. This is necessarily less rigorous than the validation/checking performed by a full node.
From the received subset of full transaction data the lightweight node can calculate balances for addresses of interest to it.