問題タブ [randomaccessfile]

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.

0 投票する
2 に答える
4109 参照

java - バイナリ ストリーム内の文字列 (byte[] として) を検索する

こんにちはチーム、バイナリファイルで文字列「Henry」を見つけて、その文字列を別の文字列に変更しようとしています。参考までに、ファイルはオブジェクトのシリアル化の出力です。元の質問はこちら

私はバイトを検索するのが初めてで、このコードが私のバイト[]を検索して交換すると想像しました。しかし、それは動作に近づくことはなく、一致するものさえ見つかりません。


さて、私はbytesHenry==seekHenry問題を見て、に交換しますArrays.equals( bytesHenry , seekHenry )

5 バイトを読み取るたびに、-4 バイト位置ずつ移動する必要があると思います。


今見つけたビンゴ

0 投票する
3 に答える
831 参照

java - JavaでRandomAccessFileを使用して英語以外の文字を書く

RandomAccessFile オブジェクトを使用してファイルにテキストを書き込もうとしていますが、英語以外の文字が正しく保存されません。

具体的には、この文 --> 「und NotenstEnder Libero」

このように保存されます --> 「und Notenst•nder Libero」

「E」文字は英語ではありません(ASCIIコードは917だと思います)。

私が使用しているコードはこれです:

これを回避して正しいテキストを書くにはどうすればよいですか?

(PS: file.writeChars については知っていますが、別の方法があるかどうか疑問に思っています!)

0 投票する
2 に答える
9284 参照

java - RandomAccessFile クラスが randomAccessFile.read() メソッドでバイトを返す方法。

私はグーグル翻訳を使用しています。質問がよく理解されていることを願っています。

ランダム アクセス ファイルについて理解できないことが 1 つあります。プログラムのしくみは理解できませんが、機能します。

これは私のプログラムです:

1 行目で read でファイルにアクセスします 2 行目でファイルと同じサイズのバイト配列オブジェクトを作成します 3 行目でバイト配列を読み取ります

しかし、バイト配列のファイルがダンプされることはありません。

プログラムは次のようになるはずです:

Javaのドキュメントには次のように書かれています:

バイト数ではなくバイト数のみを返します。

このステートメントで、この行が byte [] 変数ドキュメントのバイトをどのようにダンプするかを誰かが説明してくれませんか?

ありがとう!!

// ------------------------------------------------ ------------------------------

もう一つの例:

このメソッドを BufferedReader と比較します。

BufferedReader は行を読み取り、それを文字列に渡します。

ファイルの内容を変数に渡すこの Java ステートメントで確認できます。

しかし、この他のステートメントではそれがわかりません。

読んだだけで、コンテンツはその行をどこにも渡しません...

0 投票する
1 に答える
742 参照

java - RandomAccessFile を使用したファイルへのデータの書き込み

RandomAccessFile を使用してファイルに書き込んでいます。データ (フィールド) は固定フィールド長で格納されます。たとえば、すべてのフィールドに 16 バイトのスペースが割り当てられます。いくつかのフィールドを上書きすると問題が発生します。つまり、「Bangalore」が以前に保存されていて、それを「Delhi」で上書きすると、結果は「Delhilore」になります。"Delhi" を書く前に "Bangalore" を完全に消去するにはどうすればよいですか?

値が書き込みたい文字列で、長さが固定フィールド長(16)の場合

0 投票する
1 に答える
1566 参照

java - ObjectInputStream からデータを読み取り中にファイルポインタの位置を取得する

バイナリ ファイルから読み取るときに、現在のファイル ポインターの位置 (バイト単位) を取得する必要があります。を使用してファイルを書きましたがObjectOutputStream、今度はそれを読んで、各オブジェクトのバイト位置を覚えておく必要があります。

ただしObjectInputStream、ポインターの位置を読み取る方法は提供されておらず、RandomAccessFileオブジェクトを読み取ることはできません:(


方法または回避策があると思われる場合は、次の追加情報が役立つ場合があります。

ID をファイルに保存しました。各 ID には、少なくとも 1 つのノードがリストされます (多数のノードの場合もあります)。すべて Long-Value として。

例えば:

各 ID は、ID 値自体を long 値として格納し、ノードをArrayList<Long>.

ノードを格納し、各ノードの親 ID をリストする 2 番目のファイルがあります。このような:

背後にあるアイデアは次のとおりです。ID を知っていて、ノードに関する情報を知りたいときはいつでも、ノード ファイル内の特定の位置にあるノードを調べます。ノードを知っていて、その親 ID について詳しく知りたいときはいつでも、ID ファイル内の特定の位置を調べます。

ただし、現在、ID とノード値自体を「インデックス」として使用してファイルに書き込みました。

これらのファイルは非常に大きくなる可能性があるため (GB サイズ)、探している ID である場合は行ごとに調べたくありません。行インデックスなどではなく、他のファイルのバイト位置を覚えておくと簡単です。なぜなら、skip() または同様のメソッドを使用して簡単にジャンプできるからです。


ObjectInputStream結論: からの読み取り中に、次のオブジェクトの先頭からファイル ポインターの位置 (バイト単位) を取得する方法

0 投票する
2 に答える
1102 参照

java - RandomAccessFile を使用してファイルの内容を削除する

多くのゼロを含むファイルがあり、要件に従って、ファイル内のゼロは無効です。ファイル内のデータを見つけるためにRandomAccessFile API を使用しています。同じAPIを使用してファイルからすべてのゼロを削除できる方法はありますか?

0 投票する
2 に答える
58 参照

java - ファイルの先頭に影響を与えずにファイルの途中でデータを上書きしようとしています

ベクトルのコンポーネント (バイト) を順不同で計算するアルゴリズムがあります。これを実際に実行すると、ベクトルは数百万バイトの長さになるため、ベクトルをファイルに保存しています。しかし、簡単な例として、空のファイルから始めたいと思います:

-1 -1 -1 -1 -1 -1 -1 -1

次に、私のアルゴリズムは一度に 2 つの値を入力します。

-1 -1 4 7 -1 -1 -1 -1

それから

-1 -1 4 7 -1 -1 3 9

など、すべての値が入力されるまで。これは可能ですか? ランダム アクセス ファイルを使用してみましたが、seek() メソッドを使用すると、編集したい値の前のすべての値が 0 で埋められ、アルゴリズムが行った以前の計算が削除されます。このプログラムは大量の数列を処理する必要があるため、ファイル全体をメモリに格納することはできません。何か案は?

0 投票する
1 に答える
292 参照

java - RandomAccessFile を使用してファイルから文字列を読み取る方法は?

私のファイルコンテンツには4つの列が含まれています

001 マイク 1122 98
002 スティーブン 1232 97

RandomAccessFileを使用して、各列をそれぞれの配列型に格納する必要があります。

readInt() は、列 1 の整数を読み取るために使用されます

文字列 (列 2) を読み取って文字列配列に格納するにはどうすればよいですか?

0 投票する
2 に答える
1467 参照

java - B ツリー ノードを RandomAccessFile に永続化する

私のプロジェクトは B-Tree を書き込もうとしています。ツリーのノードをランダム アクセス ファイルに保持するのに問題があります。私は常に と に遭遇EOFexceptionsしてStreamCorruptionExceptionsいます。

私が現在使用しているいくつかのリソースは次のとおりです。

Javaで任意のオブジェクトをバイト配列に変換する

https://inaved-momin.blogspot.com/2012/08/understanding-javaiostreamcorruptedexce.html

現在の問題: ノードからリンク位置を読み取ってから、ランダム アクセス ファイルから読み取ろうとすると、StreamCorruptionExceptions.

目標: ランダム アクセス ファイル内のすべてのノードにアクセスできるように、変更してランダム アクセス ファイルに書き戻します。

テスト.java

Node.java