2016-12-07 9 views
2

私の使用事例にRandomAccessFileを使用しようとしています。私はちょうどseekが常に最初からファイルを数えるかどうかを知りたいと思う。ランダムアクセスファイルでimplementaionを探します

randomAccessFile.seek(100); 
    randomAccessFile.seek(99); 
    randomAccessFile.seek(98); 

上記の3つの操作は、先頭からバイト数をカウントしてポインタを設定しますか?または、現在のポインタの1文字に戻りますか?

このメソッドのネイティブ実装が見つかりませんでした。

+0

'seek()'メソッドはJNI経由で実装されているため、プラットフォーム固有のものです。 –

+0

@yshavitこれは単なる概念図であるかもしれません。必ずしも 'seek'がこのように実装されているわけではありません。 –

+0

@yshavitコーナーケースにいくつかの拡張機能があるかもしれません。その観点から私は –

答えて

1

上記の3つの操作は、最初からバイト数をカウントしてポインタを設定していますか?

いいえ、ファイルの先頭からすべてのバイトを物理的にトラバースしません。これが「ランダムアクセス」の全体のポイントです。つまり、どこに行くかを尋ねる場所にまっすぐジャンプします。

+0

「それはどこに行くべきかに直接ジャンプします」どのように実装されていますか? 100バイトあるとします。私は52バイト目を探します。それは第52回以降どのように読むのだろうか?理解できません。ありがとうございました –

+0

@GopsABすべてのオペレーティングシステムで低レベルのファイルI/Oがどのように機能するか尋ねていますか?申し訳ありませんが、それは物理的および論理的なブロックサイズの説明、ファイル操作のためのOSネイティブAPI、Javaがネイティブのソースコードを検索して、Javaがさまざまなシステムでどの正確なメソッドを使用しているかを調べる必要があるからです。 100 Mbのファイルがあり、75,000,000のオフセットで読み始めるように頼んだら、75,000,000バイトをスキャンしなくてもそれを行い、賢い人があなたのために作ったことに満足しているという事実を受け入れるだけです。 – Andreas

関連する問題