問題タブ [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.
hadoop - FileChannel、FileInputStream を使用した Hadoop Mapreduce
FileChannel
ファイルからデータを高速に取得するために、Hadoop Reducer で使用したいと考えています。MappedByteBuffer
これにより、ファイルの一部をメモリにマップするために使用できます。データを読み取るときは、他の API よりも高速です (少なくとも よりはるかに高速ですDataInputStream
)。FileChannel
ただし、 Hadoop API からオブジェクトを取得するソリューションが見つかりません。FSDataInputStream
現在、ファイルからデータを読み取ることしかわかりません。
どうすれば解決できますか?
java - SocketChannel 経由でファイルを転送中にバイトが見つからない
nio ServerSocketChannel と SocketChannel を使用して、クライアントとサーバー間で大きなファイルを転送しています。問題は、サイズ 6060064 バイトのファイルを送信者から受信者に転送すると、受信者は 6059040 バイトしか受信せず、一部のバイトが欠落していることです。欠落バイトの差分ギャップが増加します。これらのバイトが欠落している理由がわかりません。
送信者コード:
受信者コード:
送信者の出力:
bytesTransfered :: 18464
転送された全体のバイト数: 6060064 進行状況 100%
転送: 6060064 バイト: 119 秒 -> 49.67708595651809 キロバイト/秒
受信機の出力:
バイト転送:: 0
転送された全体のバイト数: 6059040 進行状況 100%
ファイルのサイズが 6059040 バイトに増加している間、受信側の while ループはプロセスを手動で停止するまで続き、bytesTransferedは常に受信側でゼロを返します。
これらのバイトが欠落している理由を誰か教えてください。
java - ロックせずに同じファイルに複数のスレッドから書き込む、Java
私はダウンロード マネージャーを作成しています。ファイルの異なるセグメントをダウンロードする複数のスレッドが、一度に異なる場所でファイルに書き込むようにしたいと考えています。すべての明確化のために、ファイルをロックしたくありません。一度に書き込むさまざまなスレッドの目的を殺してしまうからです。Apache HttpClient ライブラリと FileChannel transferFrom() を使用しています。現在のコードは最初のセグメントのみをダウンロードし、他のセグメントを単に無視します。
コードの説明: startDownload メソッドは新しいファイルを作成し、リンクが部分的なコンテンツをサポートしているかどうかをチェックします。サポートしている場合は、各セグメントのスレッドを開始します。それ以外の場合は、単一のスレッドがファイル全体をダウンロードします。getFileName は、URI からファイル名を抽出する関数です。Download メソッドには、HttpClient を使用して実際にファイルをダウンロードし、transferFrom を使用してファイルを書き込むコードが含まれています。
待機せずに複数のスレッドが同時に同じファイルに書き込むことができる既存のコードの修正は素晴らしいことですが、上記のタスクを実行できる場合は、他のより効率的な手法を研究することにも興味があります。いずれにせよ、待機せずにファイルに書き込むことが不可能な場合は、他の効率的なソリューションを歓迎します。前もって感謝します :)
java - Filechannel.force(true) が例外をスローした場合、書き込まれたデータはどうなりますか?
filechannel.force を呼び出して例外をスローするとどうなりますか?
filechannel.write が成功し、バッファ コンテンツ全体をファイル チャネルに書き込むことができたとき、すべてがディスクにフラッシュされたかどうかを確認したいと思います。例外をスローできる force(true) を呼び出します。ファイルチャネルに書き込んだデータはどうなりますか? ディスクに何もフラッシュされませんでしたか、それともデータの一部がフラッシュされた可能性がありますか? 操作をロールバックするにはどうすればよいですか?
java - 時間の経過とともに増加するJavaファイルチャネルのCPU使用率
インターネットからファイルをダウンロードするために、Java nio filechannel transferFrom 関数と Apache httpclient を使用しています。起動は正常ですが、しばらくするとCPU使用率が急上昇します。そして、ダウンロード速度が低下し、最終的にはゼロになります。
評判が悪いため、Sryは画像を投稿できません
java - Java NIO FileChannelを使用してソケット経由でファイルをコピーするには?
FTP Server/Client に似た単純な Client/Server アプリケーションを実装することになっています。
クライアントとサーバーの両方がファイルを送受信できるはずですが、ここでは、サーバーからクライアントにファイルを送信するだけに対処しましょう。
それらの間にはすでに開いているソケットがあります。バイトバッファを使用したくありません。Files.copy() メソッドを試してみたところ、クライアント側でファイルが作成されましたが、ゴミでいっぱいでした。
FileChannel.transferFrom/To を使用しようとしていますが、うまくいかないようです。
誰かがソケットでそれを使用する方法の例を提供できますか?
java - ファイル チャネルが間違ったデータを読み取り/追加する
ネットワーク経由でパケットを送信するために、バイト バッファーを備えたファイル チャネルを使用しています。私の問題は、ファイルチャネルが最後の数バイトを読み取るときに、書き込み後にバイトバッファーをクリアしているにもかかわらず、読み取った前のバイトから最後のビットのデータを追加することです。
例えば、
Byte Buffer size = 512 最後の反復で、送信する残りのバイトは 372 です。最後の 372 を読み取りますが、その末尾に別の 140 バイト (512-372) を追加し、最後の 140 バイトが前の 512 バイトが送信されました。
私のコードは次のとおりです。