問題タブ [filechannel]
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 - これは Java 7 のオフバイワンのバグですか?
Java API ドキュメントと Java コードの説明と確認をどこで求めればよいか分からないので、ここで行います。
の API ドキュメントでFileChannel
、オフ バイ ワン エラー wrt to fileposition
およびsize
複数の場所でのファイルを見つけました。
これはほんの一例です。州の API ドキュメントtransferFrom(...)
:
「指定された位置がファイルの現在のサイズより大きい場合、バイトは転送されません。」
OpenJDKコードにもこのコードが含まれていることを確認しました...
FileChannelImpl.java
...ドキュメントと一致するファイル内。
さて、上記のコード スニペットと API ドキュメントは相互に一貫しているように見えますが、ファイルのデータへの 0 ベースのインデックスであるため、上記は単なる「より大きい」ではなく「以上」であるべきだと「感じます」 。での読み取りには、呼び出し元に返すデータがありません! ( では、少なくとも 1 バイト (ファイルの最後のバイト) が呼び出し元に返される可能性があります。)position
position == size()
position == size() - 1
同じ API ドキュメント ページにある他の同様のインスタンスを次に示します。
position(...)
: "位置をファイルの現在のサイズより大きい値に設定することは正当ですが、ファイルのサイズは変更されません。" (「以上」である必要があります。)transferTo(...)
: "指定された位置がファイルの現在のサイズより大きい場合、バイトは転送されません。" (「以上」である必要があります。)read(...)
: "指定された位置がファイルの現在のサイズより大きい場合、バイトは読み取られません。" (「以上」である必要があります。)
最後に、 の戻り値に関するドキュメント セクションはread(...)
、残りのドキュメントとの一貫性さえ保っていません。ここにそれが述べているものがあります:
戻り値:
読み取られたバイト数。場合によってはゼロ、または指定された位置がファイルの現在のサイズ以上の場合は -1
したがって、この唯一の例では、彼らが正しいことを述べているのを見ます。
全体として、私はこれらすべてをどうすればよいかわかりません。今日、このドキュメントに一致するコードを書いた場合、Java (コードまたはドキュメント) の将来のバグ修正によってコードがバグだらけになり、私の側でも修正が必要になります。今日の状態で正しいことを自分で行うと、最初からコードにバグが発生します。
java - バッファアンダーフロー例外 Java
ファイルに値を書き込んでいます。
値は正しく書かれています。別のアプリケーションでは、例外なくファイルを読み取ることができます。
しかし、私の新しいアプリケーションではBufferunderflowexception
、ファイルを読み取ろうとするとエラーが発生します。
bufferunderflowexception
を指します:
これは、ファイルを読み取るための私のコードです:
java - 大きなファイルをメモリマップできません。マップに失敗しました。OutOfMemoryError
これが私のコードです:
エラーは次のとおりです。
32 ビット システムで 1.5GB のファイルをマップしようとしています。
nio はこの問題に対処することになっていると思いました。私は何か間違ったことをしていますか?
よろしく。
java - Java 7 AsynchronousFileChannel を使用したファイルへの追加
JAVA 7 API を使用して非同期でファイルを書き込もうとしてAsynchronousFileChannel
いますが、ファイルに追加する簡単な方法が見つかりませんでした。
API の説明には、AsynchronousFileChannel
はファイルの位置を維持しないと記載されており、ファイルの位置を指定する必要があります。これは、グローバル ファイル位置の値を維持する必要があることを意味します。さらに、このグローバル状態はアトミックであるため、正しくインクリメントする必要があります。
を使用して更新を行うより良い方法はありますAsynchronousFileChannel
か?
また、誰かが API での Attachment オブジェクトの使用について説明してもらえますか?
javadoc には次のように記載されています。 attachment - I/O 操作にアタッチするオブジェクト。ヌルにすることができます
この添付オブジェクトの用途は何ですか?
ありがとう!
java - transferFrom を使用して Java で 2 つのファイルを連結する方法
以下は私のコードです。transferFrom は、転送先のチャネルの位置を変更しないことに注意してください。
これは動作しません。最初のファイルをコピーするだけです。
よろしく。
android - Androidで移動後に画像とビデオが読めない
この関数を使用して、いくつかの画像とビデオをカスタム フォルダーに移動しています。
ファイルは正しく移動され、src ファイルは正常に削除されました。問題は、ギャラリーで画像またはビデオを開こうとすると、黒く表示されるか、ビデオを再生できないことです。そのため、ファイルマネージャーで確認したところ、ファイルのアクセス許可が間違っていることがわかりました。何か提案はありますか?
ありがとう。
java - ソースの宛先が同じ場合、Javaのfileoutputstreamはゼロバイトを生成しますか?
同様のコードを使用して、Java で filecopy を使用しています。
問題は時々source
、dest
同じファイルを指している可能性がありoutputChannel = new FileOutputStream(dest).getChannel();
ます.同じハンドル。では、これに対抗する方法は何ですか?
コードに何かを追加する必要があります
上記は機能しますか?または、これを処理するより良い方法はありますか?
ありがとう