問題タブ [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 - ファイルチャネルと RandomAccessFile のどちらが読み取りと書き込みのパフォーマンスに優れていますか?
私は最近FileChannelに出会いました。私はRandomAccessFileの大ファンです。しかし、ファイルからの読み取りとそのコンテンツの別のファイルへの書き込みを選択FileChannel
するのはなぜだろうと思っています。RandomAccessFile
特定のパフォーマンス上の理由はありますか? FileChannel
ファイルチャネルを使用できる理由の1つになる可能性があるため、ロックをいかなる目的にも使用したくありません。他のStackOverflow 応答BufferReader
で提案されているように、使用したり、そのようなことはしたくありません。
java - RandomAccessFile 対 NIO チャネル
次の動作を理解しようとしています。私の古いコード、
O/P - 削除済み - false
「channel.close();」を実行した場合のみ ファイルを削除する前に。ファイルを削除して true を返しますか。
新しい置き換えコード、
O/P - 削除済み - true
ただし、これはアプリケーションが終了するまでファイルを削除しません。「fChannel.close()」を使用すると、すぐに削除されます。
いくつかの質問、
- なぜ異なる動作なのか、RA と Seekable Channel など、両方が異なるタイプであることを理解しています。しかし、よくわかりませんが、なぜ delete が異なる動作をする必要があるのでしょうか。
- 新しい実装では、アプリケーションが終了するまでファイルを削除しない場合は、false を返す (つまり、close が呼び出されるまで削除しない) か、すぐに削除する必要があります。
バグに遭遇したのか、何かが欠けているのかわかりません。任意のポインターが役立ちます。
ありがとう
nio - java nio socketChannel.write() 欠落バイト
bBuffer
タイプのオブジェクトであり、それは(画像ファイルです)ByteBuffer
から来ました。FileChannel.map()
クライアントでこの画像ファイルを受け取ったとき、それは完全な画像ではなく、画像の約半分が欠落していました。そこで、いくつかの統計をコンソールに出力して、書き込まれたバイト数を確認しました。出力は次のとおりです。
残りのバイトはどうなりましたか? (319923 - 131071) バイトが不足しているようです。
ファイルサイズやバッファ容量に関係なく、written
等しい場合もあります。bBuffer.capacity()
java - 特定のバイト数を ByteBuffer に読み込む
10MB のバイナリ ファイルがあります。異なるサイズ (300、273 バイトなど) のチャンクで読み取る必要があります。読むために私はFileChannel
とを使いますByteBuffer
。現在、読み取りの反復ごとに、ByteBuffer
読み取る必要がある新しいサイズを割り当てています。
ByteBuffer に 1 回だけ (たとえば 200 KB) 割り当てて、それに読み込むことは可能ですか (300、273 バイトなど)? 一度に 200KB 以上を読み取ることはありません。ファイル全体を読み取る必要があります。
UPD
メモリの制約により、ファイル全体を一度に読み取ることができません。そのため、チャンクで読み取りを実行します。効率も非常に重要です (そのため、複数の割り当てで現在のアプローチを使用したくありません)。ありがとう
java - MappedByteBuffer が java.nio.BufferOverflowException をスローする
私はJava nioを学んでおり、MappedByteBufferとExecutorServiceを使用してファイルを非同期にコピーしています。私の問題は、メソッド MappedByteBuffer.put() が java.nio.BufferOverflowException をスローしていることです。しかし、私のデバッグでは、ターゲット ファイルのオーバー ポジションにコピーしていません。これは、ファイルの新しいコピーを作成するために使用するコードの一部です。
例外は次のとおりです。