Ok I accept that , is there any way of say buffering the information as I do not want slow down the loop while waiting for it.
That happens automatically. You use the SoftwareSerial::available() method to see how much data has been buffered. Only when there is some data should you try to read it. If you try to read data that is not available, the read() method returns a -1. The return code from read is an int, which won't fit in a char.
If you use the available() method, and only read when there is data, the data is in the low order byte, which can be stored in a char, since the high order byte is KNOWN to be 0.
Keep in mind, though, that you should NOT be asking for current usage on EVERY pass through loop. It would be best to ask again only after receiving a reply from the last asking.