You could read the next dataSource into a byte array using this method:
java.net.URL read stream to byte[].
Then when you're ready to read play the song, use a localhost socket.
new Thread(new Runnable() {
public void run()
{
ServerSocket serverSocket = new ServerSocket(1111); //some port
Socket s = serverSocket.accept();
OutputStream out = s.getOutputStream();
out.write(myByteArray); //either this is static somewhere, or you find a way to get the byte array into the instance
out.close()
}
}).start();
mp.setDataSource("127.0.0.1:1111");
You'll still have to prepare the song, but the data transfer will be much faster than reading off an internet URL. So we do that part while the previous song is playing.
Also, note that I didn't handle any exceptions here, you'll have to.