問題タブ [nio]
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 - NIO - クローズされた接続の検出
Java NIO API を使用してノンブロッキング IO を実行するサーバーを作成しました。時折、クライアント アプリケーションが突然シャットダウンし (停電などにより)、接続がサーバー側で開いたままになる状況が見られます。
同僚が同じ問題に遭遇し、この種のことを検出するために回線上のハートビートを使用していると言いましたが、もっと簡単な方法があることを願っています。他の誰かがこの問題に遭遇しましたか?
IOException
追加情報: 私の現在のサーバー設計では、読み取り/書き込み操作を試行するときにキーがキャッチされると、キーがキャンセルされ、対応するチャネルが閉じられます。このアプローチは 99% の確率で機能するようです。接続が開いたままになっているように見える状況は、ほんの一握りしか見たことがありません。
scala - ScalaのアクターのためのノンブロッキングIOオープンソース実装はありますか?
処理する必要のある非常に大きなファイル(500Meg以上のzipファイル)があります。
Scalaのアクター用のノンブロッキングIOオープンソース実装はありますか?
java - Java NIO Selector.select() によってブロックされたスレッドは、待機中または実行中と見なす必要があります
selectorObj.select()
メソッド状態 のドキュメント
このメソッドは、ブロック選択操作を実行します。少なくとも 1 つのチャネルが選択された後、このセレクターの wakeup メソッドが呼び出された後、または現在のスレッドが中断されたときのいずれか早い方でのみ戻ります。
ドキュメントを理解しました 選択メソッドによってブロックされたスレッドは、待機するべきではありませんか? プロファイラーを実行すると、スレッドが待機状態ではなく実行モードになっていることがわかります。
私はそれを受け入れますが、スレッドが待機状態にある必要があることは言及されていませんが、シグナルディスパッチャースレッドがセレクターに登録されたチャネルのアクティビティに関する何らかの入力を提供するまで、それは私の仮定です。スレッドは待機状態である必要があります。
なぜ私の仮定が間違っている可能性があるのか について、いくつかの助けを提供してください。
java - すべてのコンソール出力を適切なエンコーディングでSwingJTextArea/ JTextPaneにリダイレクトするにはどうすればよいですか?
System.outPrintStreamをJTextPaneにリダイレクトしようとしています。これは、特別なロケール文字のエンコードを除いて、正常に機能します。私はそれに関する多くのドキュメントを見つけました(例えば、mindprodエンコーディングページを参照してください)が、私はまだそれと戦っています。同様の質問がStackOverFlowに投稿されましたが、私が見た限りでは、エンコーディングは対処されていませんでした。
最初の解決策:
2番目のソリューションはjava.nioを使用する必要があります。文字セットの使い方がわかりません。
どちらの解決策もうまくいきません。何か案が?
よろしくお願いします、jgran
java - Java: ストリーム、リーダー、char バッファー、stringbuilder などの間で一般化が可能ですか?
背景ストーリー:
XML には、これらの Source および Result インターフェースがあります。これらは、Java の異なる XML テクノロジ間のアダプタです。これらのクラスのインスタンスは、DOM、SAX、JAXB、XML ストリーム、XML イベント (その他も?) を表します。
質問:
それで、普通の古い文字列に匹敵するものはありますか? 以下の間のいくつかの一般化?
[Input|Output]Stream
Reader|Writer
StringBuffer
StringBuilder
CharBuffer
(NIOより)File
(またはPath
、JDK7 ファンの場合)- (そして最後に)
CharSequence
おそらく、そのような機能を提供する共通の API (Apache commons 何か...?) があるのでしょうか?
明確な例:
古典的なアプローチでの使用法:
インターフェイスは、考えられるすべてのソース (結果) から (へ) 文字を読み取る (書き込む) ことができる必要があります。
意図したアプローチでの使用:
いくつかの架空CharacterSource
のCharacterResult
インターフェイスを使用すると、それぞれ 1 つのメソッドで読み取り/書き込みが可能になります。
意図したアプローチの実装、考えられる階層:
そのような機能が存在しない場合、独自のミニ API を作成する必要がありますか? (より大きな API については、私は現在関与しています)
これはどうですか?
java - Java NIO UDP - 登録しようとするとセレクターがハングする
DatagramChannel を登録しようとすると、マーケット ラインが永遠にハングします。
誰かが理由を知っていますか?
java - Java NIO FileChannel と FileOutputstream のパフォーマンス/有用性
ファイルシステムへのファイルの読み取りと書き込みにnioFileChannel
と通常を使用した場合に、パフォーマンス (または利点) に違いがあるかどうかを調べようとしています。FileInputStream/FileOuputStream
私のマシンでは、どちらも同じレベルで実行され、多くの場合、FileChannel
速度が低下することがわかりました。これら2つの方法を比較して詳細を教えてください。これが私が使用したコードです。私がテストしているファイルは around 350MB
. ランダムアクセスやその他の高度な機能を検討していない場合、ファイル I/O に NIO ベースのクラスを使用することは適切なオプションですか?
scala - Scalaでファイルを処理するときのjava.nio.BufferUnderflowException
4MBのログファイルを処理しているときに、この人と同様の問題が発生しました。実際、私は複数のファイルを同時に処理していますが、この例外が発生し続けるため、単一のファイルに対してテストすることにしました。
私がいつも得ているのは、itr = 75703で失敗するのに対し、出力ファイルは常に64KB(正確には65536バイト)になるということです。temp.resetまたはSystem.gcをどこに置いても、すべての実験は同じになります。
問題はメモリ割り当てに依存しているようですが、この問題に関する有用な情報を見つけることができません。これを解決する方法について何かアイデアはありますか?
あなたのすべての助けは大歓迎です
編集:実際にはバイナリファイルとして処理したいので、この手法は良い解決策ではありません。多くの人が代わりにBufferedInputStreamを使用することを勧めていました。
java - Java サーバーから複数の C++ クライアントへの効率的なファイル転送?
多くの場合、多くのクライアントが同じファイルを必要とするため、インターネット経由で Java サーバーから C++ クライアントにファイルを高速で転送する必要があります。ファイルを送信するために適切に最適化された関数のように聞こえる Java の transferTo() を見ていました。しかし、いつ transferTo() を使用して C++ でそれを受け取るのが最適なのかわかりません (つまり、単なる生データ転送なのか、クライアント側でファイルがいつ終了したかを判断する方法など)。これは、Windows と Linux の両方で動作する必要があります。また、transferTo() 以外に、特に多くのクライアントが通常同じファイルを必要とするという事実を利用して、より効率的にする方法はありますか? マルチキャストなどの言い方がわかりません。また、VPNではなくアプリケーションレベルのセキュリティを使用しており、JavaサーバーではAESで暗号化し、MACデジタル署名を使用しています。そのため、C++ 側の暗号を最小限の負担で処理するためのクロスプラットフォーム ライブラリの推奨事項も探しています。私は C++ に非常に精通していますが、ネットワーク プログラミングの経験がないため、提案よりも考慮してください。ありがとう。
java - javanioセレクターウェイクアップ
selector.wakeup();
2つのスレッド間のメソッドの実例を教えてください。
スレッドがselector.select()メソッドを待機している単純なプログラムを作成しようとしました。2番目のスレッドはいくつかのソケットを作成し、セレクターに登録しようとします。最初のスレッドがブロックされます。
したがって、セレクターのwakeup
メソッドを使用する必要がありますが、どういうわけか、最初のスレッドはブロッキングモードから出ません。
wakeupメソッドのjavadocには次のように記載されています。
Selector.select()またはSelector.select(long)メソッドの呼び出しで別のスレッドが現在ブロックされている場合、その呼び出しはすぐに返されます。
PS他の回避策はほとんどありません。そのうちの1つはselect(timeout)ですが、どこに間違いがあるのかを突き止めようとしています。
疑似コード:
最初のスレッド:
2番目のスレッド: