問題タブ [random-access]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - RandomAccessFile を使用してファイルを作成すると、java.io.FileNotFoundException が発生する
RandomAccessFile を使用してファイルを作成しようとすると、FileNotFoundException が発生します。
私は今、これを回避する方法を知りません。それは私を夢中にさせています。
ありがとう
java - 配列の効率的な挿入/削除アルゴリズム
データ フィードをサブスクライブし、そこから INSERT/DELETE メッセージのインデックス値を使用して構造を作成および維持します。効率的な方法で断片的な更新を処理できるアルゴリズムを知っているかどうか、集まった知識人に尋ねたいと思います。一般に、バッチ更新には 2 ~ 6 個のそのようなメッセージが含まれます。
配列の推定サイズは、約 1000 要素です。
バッチ更新は、特定のインデックスでアイテムの挿入または削除を規定する、インデックス順に並べられたメッセージのリストとして到着します。アレイ内のほとんどのチャーンは、その終了よりも開始に近いと予想されます。
いくつかの基本的な処理を行うことで、バッチの影響を受ける範囲と全体的なサイズ デルタを特定できるため、影響を受けない配列のテール セクションを 1 回だけ移動できます。
同様に、最初の要素の前と最後の要素の後に一定量の空き領域を維持して、最小限のコピーを行うことができます。
その他の最適化には、次のような更新の認識が含まれます。
等々。
ただし、認識ステップを実行する際のオーバーヘッドには注意が必要です。単にコピーを実行するよりも時間がかかる可能性があるため、先読みとトラックバックが発生する可能性があります。
配列の予想されるサイズを考えると、ツリー構造は重量級のように見えます。いくつかの基本的なパフォーマンス テストでは、バイナリまたは自己均衡ツリー (この場合は赤黒ツリー リストの実装) は、約 15K ~ 20K 要素の後にのみパフォーマンスの利点を示し始めることが示唆されています。 : 配列のコピーは、サイズが小さいほど大幅に高速です。おそらく、この実装には Java を使用していることを付け加えておく必要があります。
ヒント、ヒント、提案は大歓迎です。
乾杯
マイク
java - FileInputStream.skip() はシークを行いますか?
おそらく大きなファイルの最後の 10MB を別のファイルにコピーしたいと考えています。理想的には、FileInputStream、skip()、read() の順に使用します。ただし、skip() のパフォーマンスが悪いかどうかはわかりません。skip() は通常、その下にあるファイル シークを使用して実装されますか、それとも実際にデータを読み取って破棄しますか?
RandomAccessFile については知っていますが、その代わりに FileInputStream を使用できるかどうかに興味があります (API が非標準であるため、RandomAccessFile は面倒です)。
java-me - J2ME でのファイル ランダム アクセス
J2ME にはクラスに似たものRandomAccessFile
がありますか、またはこの特定の (ランダムアクセス) 機能をエミュレートする方法はありますか?
問題は次のとおりです。かなり大きなバイナリ データ ファイル (約 600 KB) があり、そのデータを使用するモバイル アプリケーションを作成したいと考えています。そのデータのフォーマットは自家製で、多くのインデックスブロックとデータブロックが含まれています。他のプラットフォーム (PHP や C など) でのデータの読み取りは、通常、次のようになります。
- インデックス キー ( ) 用に 2 バイトを読み取り、必要なデータ型の
K
インデックス値 ( ) 用に別の2 バイトを読み取りますV
- ファイルの先頭からバイトをスキップして、インデックス キーのデータが開始
V
するファイル位置をシークします。K
- データを読む
- 利益 :)
これは、プログラム フロー中に何度も発生します。
ええと、私は J2ME でまったく同じことを行う可能性を調査しています。私が Java 全体にまったく慣れていないことは認めますが、そうでないInputStream
( DataInputStream
) クラス以外のものを見つけることができないようです。私が必要とする基本的なシーク/バイトへのスキップ/戻り位置機能があります。
それで、私のチャンスは何ですか?
java - Javaでランダムアクセスファイルを削除する
次のようにランダム アクセス ファイルを作成しました。
ファイル「afile」を削除したい。誰かが私にそれを行う方法を提案できますか?
java - 配列でCollections.shuffle()が失敗するのはなぜですか?
コードが機能しないのはなぜですか?
結果は次のとおりです。0123 4 5 6 789。
ランダムにシャッフルされたシーケンスを期待していました。
java - RandomAccessFile メモリ リーク
JavaでRandomAccessFileを使用しています。メモリリークの問題があります。コードを次のように簡略化しました。
このコードを実行した後 (および GC に十分な時間を与えた後)、レポートされたアプリケーションのメモリ使用量は 150MB 強です。
私は何を逃したのですか?それともJavaのせいですか?
java - Java: バッファリングされた入力を使用してランダム アクセス ファイルから文字列を読み取る
これまで Java IO API を身近に体験したことがなく、今は本当にイライラしています。それがどれほど奇妙で複雑で、単純なタスクを実行するのがどれほど難しいか、信じがたいです。
私の仕事: 2 つの位置 (開始バイト、終了バイト)pos1
とpos2
. これらの 2 バイト間の行 (開始バイトを含み、終了バイトは含まない) を読み取り、それらを UTF8 String オブジェクトとして使用する必要があります。
たとえば、ほとんどのスクリプト言語では、次のような非常に単純な 1-2-3 ライナーになります (Ruby では、Python、Perl などでも本質的に同じになります)。
Java IO API ではすぐに地獄に落ちます ;) 実際、\n
通常のローカル ファイルから行 ( で終わる)を読み取る方法は 2 つあります。
- および_
getFilePointer()
_seek(long pos)
_ _ _read*()
_read()
_ >かなり遅い)。 - BufferedReaderには優れ
readLine()
たメソッドがあり、 でシークすることもできskip(long n)
ますが、ファイル内の現在の位置は言うまでもなく、既に読み取られた偶数バイトを特定する方法はありません。
私は次のようなものを使用しようとしました:
...そして、fc.position()
現在のファイル読み取り位置を取得fc.position(newPosition)
して設定するために使用しますが、私の場合はうまくいかないようです:BufferedReaderによって行われたバッファの事前充填の位置を返すように見えます-これらカウンターは 16K 単位で切り上げられているようです。
私は本当にそれをすべて自分で実装する必要がありますか?
- ファイル内の位置を取得/設定できるようにする
- バッファファイルの読み込み操作
- UTF8 文字列の読み取りを許可します (または、少なくとも「次まですべてを読み取る」などの操作を許可します
\n
)
すべてを自分で実装するよりも簡単な方法はありますか? 私は何かを監督していますか?
java - java.io.RandomAccessFile Mac での大きなファイルの無効な引数
非常に大きなファイル (約 151 ギガバイト) へのランダム アクセスが必要なプログラムを実行しています。Orchard ラボの MacPro マシン (詳細はhttp://inst.eecs.berkeley.edu/cgi-bin/clients.cgi?choice=6a&string=を参照) の 1 つで実行すると、プログラムはファイルの特定の部分を読み取り、ファイル システムからのエラーでクラッシュします。
私は RandomAccessFile クラスを使用しています。
Orchard ラボのどのコンピューターを使用しても、毎回同じ正確なバイト範囲で同じ正確な場所で発生します。
Debian Linux を実行している DELL コンピュータでこのコードをテストしましたが、この問題はありませんでした。
java - RandomAccessFileのspeicifcバイトをnullに戻すことは可能ですか?
元々、RandomAccessFileを作成したときに、いくつかのバイトをスキップしてnullのままにしましたが、今は書き込んだバイトのいくつかを削除する必要があります。現在、場所をスペースで上書きしていますが、空に戻す方法はありますか?
編集:値が含まれている必要があるため、スキップしたときにデフォルトで割り当てられている元の値に戻す方法を知りたいです。