テキストファイルの末尾から指定した行数のテキストを効率的に取り出したいです。
Linux の tail コマンドのようなものです。

File file = new File("c:¥¥tmp¥¥test.txt");
BufferedReader br = new BufferedReader(new FileReader(file));

String str;
while((str = br.readLine()) != null){
  ・・・
}

br.close();

このようなファイルの先頭から順番に1行ずつ取得する方法を応用して最後のn行を取り出すことは出来るのですが、この方法だとファイルサイズが大きい時に処理時間が長くなってしまいます。
ファイルの末尾から1行ずつ取り出す方法はあるでしょうか?

対象のテキストファイルは以下の想定です。

  • 文字コードは UTF-8
  • 改行はCRLF、LFが混在
  • 1行の文字数に上限なし