I am writing a mergesort for an externalsort, which reads 2 chunks of data at a time from a file A, merges them into a larger chunk, and writes it to a file B. After this, I need to then read 2 of these increased chunks at a time from file B, merge them into 1 larger chunk, and write this to file A. This switching goes on until all the data counts as 1 chunk at the end.
I have tried swapping the identifiers around like this after each iteration:
RandomAccessFile temp = fileA;
fileA = fileB;
fileB = temp;
This requires, that I update the BufferedInput and BufferedOutputStreams with the new file directory names and construct them each time.
I have a limited amount of RAM, so I cannot keep creating new objects unless I have to. Is there a better way to switch the target file and source file each iteration?
A simple generic
Swapableclass should allow you to swap between two objects.Create your two
RandomAccessFiles and install them in aSwapable. Use thegetmethod to get the current file. Use theswapmethod to switch between them.