問題タブ [nio2]

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 投票する
1 に答える
4944 参照

java - Java 7 Files.walkFileTree がリモート ドライブで tar ファイルに遭遇すると例外をスローするのはなぜですか

フォルダーをナビゲートしてオーディオファイルをカウントするために使用Files.WalkFileTree()していますが、tar ファイルに遭遇したときに問題があり、スキップすることを期待していた実際のフォルダーとして扱っているようです。

この動作を制御できるオプションが表示されません

コード:

このスタックトレースを与える

しかし、それはリモート ドライブ (nas ドライブ) です。ローカル ドライブではそのようなエラーは発生しません。

編集 私がうまくいったと思った以下の答えに基づいて、以下を実装しました

しかし、私のテストは間違っていました。失敗した FileTreeWalker のコードが previsit メソッドの前に呼び出されるため、実際には機能しません。

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

java - JavaのNIO2APIは、NIOを使用してシングルスレッドの多重化サーバーを作成するための代替手段ですか?

NIOを使用して泥を書く方法を学んでいます(高レベルのライブラリを除外していませんが、低レベルの操作も学びたいと思います)。

私の読書で私はNIO2について学びました。このプロジェクトではすでにJava7を使用しているので、シングルスレッドの多重化サーバーを作成するために使用するNIO操作がNIO2で置き換えられないか、つまり、おそらく簡単になるかどうか疑問に思っています。私にとってNIO2の関連部分は、その非同期クラスです。ただし、これらが必要かどうか、または基本的なマルチプレクサの代わりに必ずしも必要ではない別の/新しい抽象化かどうかを知るのに十分な経験はありません。

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

java - Java 7でFile.listFiles(FileFilterフィルタ)をnioに置き換える方法は?

Java 6 で記述されたファイル I/O トラバーサル コードがいくつかあり、それを Java 7 の新しい I/O に移動しようとしていますが、この種のものに代わるものが見つかりません。

つまり、ファイルのみのパスをフィルタリングする方法はなく、ファイルのリストを返すため、呼び出すメソッドで File の使用を制限したい場合は、各ファイルをパス (file.toPath) に変換する必要があります。 .

私は FileVisitor を見ましたが、これではツリーのトラバース方法を制御できないようですので、うまくいくとは思いません。

では、Java 7 の Path for File はどの程度の代替になるのでしょうか?

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

file - Files.walkFileTree 中に AccessDeniedException を防ぐにはどうすればよいですか?

Java 1.7 nio を使用しようとしています。電話すると

Files.walkFileTree(source[i], tc);

ここで、source[i] は Windows ファイル システム上の任意のフォルダーで、tc は SimpleFileVisitor です。java.nio.file.AccessDeniedException が発生します。フォルダーとフォルダーの内容を確認し、すべてのユーザーに対して読み取り、書き込み、および実行が許可されていることを確認しました。

ファイルを使用してファイルに問題なくアクセスできます。walkFileTree でファイルへのアクセスに問題があるのはなぜですか?

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

java - NIO2:URIをパスに一般的にマップする方法は?

特定のファイル システムに固有のコードを記述せずに、aURIを aにマップする簡単な方法を見つけようとしています。Path以下は機能しているように見えますが、疑わしいテクニックが必要です。

いくつかの例でこのコードを実行すると、次の結果が得られます。

jar 内のディレクトリ「/org/foo」を参照する Path のように、適切な種類の に「ルート化」されたオブジェクトにがどのようURIにマップされているかに注目してください。PathFileSystem

このコードについて私が気になるのは、NIO2 を使用すると次のことが簡単になることです。

  • URI を既存のファイル システム のパスにマップします。Paths.get(URI)
  • URI を新しい FileSystemインスタンス にマップします。FileSystems.newFileSystem(uri, env)

...新しい FileSystemインスタンスで URI をパスにマップする良い方法はありません。

私が見つけた最良の方法は、ファイルシステムを作成した後、パスを提供するように頼むことができるということでしたFileSystemProvider:

しかし、インスタンス化したばかりの FileSystem (つまりpath.getFileSystem() == fs) にバインドされたパスを返す保証がないため、これは間違っているようです。私が参照している FileSystem インスタンスを知るには、FileSystemProvider の内部状態にほとんど依存しています。もっと良い方法はありませんか?

0 投票する
0 に答える
172 参照

linux - JDK 7 は Linux で NIO2 をどのように実装しますか?

JDK 7 が IOCP を使用して Windows に NIO2 を実装していることは知っていますが、Linux はどうですか?

Linux には 2.6 以降の AIO がありますが、これはファイルに対してのみ有用です。ネットワーク部分はどうですか?

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

java - Java 7のnio.fileパッケージは、新しいファイルの作成に非常に時間がかかります

Javaプログラムから3億個のファイルを作成しようとしていますが、古いファイルAPIから新しいjava 7 nioパッケージに切り替えましたが、新しいパッケージは古いパッケージよりもさらに遅くなります。

古いファイルAPIを使用していたときよりもCPU使用率が低くなっていますが、この単純なコードを実行していると、0.5Mバイト/秒のファイル転送速度が得られ、Javaからの書き込みは1つのディスクを読み取り、別の(書き込みはディスクにアクセスする唯一のプロセスです)。

ここで妥当なスループットを得る希望はありますか?


アップデート:

大きなファイルから3億の5-10kバイトの画像ファイルを解凍しています。私は3つのディスクを持っており、1つはローカルで2つはSANが接続されています(すべて、大きなファイルで最大20MB /秒のスループットレートがあります)。

また、速度を2MB /秒未満のスループット(これらのファイルを解凍するのに9日)に改善するこのコードを試しました。

ローカルディスクから読み取り、SANに接続されたディスクに書き込みます。私はHadoopSequenceFile形式から読み取っていますが、hadoopは通常、基本的に同じコードを使用して20MB/秒でこれらのファイルを読み取ることができます。

非常に遅いことを除いて、場違いに見える唯一のことは、シーケンスファイルがgzipされているにもかかわらず、書き込みIOよりも読み取りIOが約2:1多いことです(ただし、画像は実質的に1:1の比率になります)。圧縮ファイルは約である必要があります。出力と1:1。


2回目の更新

iostatいくつかの奇数が表示されています。ここではxvdfが表示されています。読み取りと書き込みを行うJavaプロセスが1つありxvdbxvdf他のプロセスはアクティブではありません。xvdf

読み取りxvdfは書き込みの10倍であり、信じられないほどです。

0 投票する
8 に答える
140634 参照

java - クラスパス リソースの java.nio.file.Path

Class.getResource(String)クラスパス リソース (たとえば、から取得するもの) を として取得する API はありますjava.nio.file.Pathか? Path理想的には、クラスパス リソースを備えた派手な新しい APIを使用したいと考えています。

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

java - ファイルが存在するかどうかの定期的なチェック

ファイルが存在するかどうかを確認したい場合は、次を使用します。

しかし、インストールのチェックとして使用したい場合: ファイルは、たとえば 5 分または 10 分後に作成できます: ファイルがfile.exists()存在するかどうかをどのように制御できますか?

例えば

  • インストールが開始されましたが、ファイルが存在しません
  • インストールを続行 5 分 ファイルがまだ存在しない
  • 10分後-ファイルが作成されました-たとえばInstallation.chk(ファイルはすでに存在します)、ifステートメントはtrueになりました

Javaで作成することは可能ですか?はいの場合、どのように?