If your String is too big and you are trying to keep it in memory at a time, it will always cause you OutOfMemoryError independent of the fact which reader you use.
So, the problem is not your Reader. The problem is your String object (the one you want to pass).
There is definitely something wrong with your architecture, if you need to store/pass such a huge file as a String variable.
Your mistake is that you are trying to put your XML text in a Java String variable. You should avoid storing big objects in memory, that's the key point here.
Generally texts are a subject to compression with the compression ratio of 0.1 - 0.01.
Try to use ZipOutputStream/ZipInputStream (or some similar libraries) - they work fine with streams reading/writing to files.
In my practice it works perfectly with huge XML files.