Instead of reading in the whole file and splitting it, wouldn't it make more sense as you read each chunk to look for the newline, take whatever is in your sting up to that and push it into the hash, delete it from the front of your string and keep reading?
If the file is truly "large" I wouldn't want to read then whole thing in then split it.