問題タブ [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.

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

java - ソケットチャネルを使用してデータを読み書きし、接続を受け入れる方法

Java NIO を使用して単純なサーバー クライアント アプリケーションを作成しました。そこでは、接続の受け入れ、データの読み取り、および書き込みに単一のセレクターを使用しました。しかし、2番目のセレクターがデータを読み取り、3番目のセレクターがデータを書き込む間、1つのセレクターが接続の受け入れでビジーになるアプリケーションが必要です。

つまり、すべての負荷を単一のセレクターに入れたくありません。

これを達成する方法は?オンラインヘルプはありますか

ありがとうディーパック。

// セレクターを作成する Selector selector = Selector.open();

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

java - NIOサーバーがクライアントをリッスンできません

こんにちは私は単純なJavaNIOサーバーを実装しようとしています。これはsocketChannelをセレクターに登録します。したがって、私はクライアントに耳を傾け、いくつかの応答を送り返したいと思います。socketChannelがセレクターに登録された後、クライアント(非NIO)がデータを送信しても、サーバーは読み取ることができません。ただし、生成されたキーはまだ繰り返されています。

詳細ビュー:サーバー側:

public void run(){while(true){

注意:シングルスレッドで実行すると同じプログラムが機能しますが、上記の方法で実装すると、クライアントをリッスンしなくなります。この問題の解決にご協力ください。

0 投票する
5 に答える
3835 参照

java - TIBCO Rendezvous メッセージのバイト エンコーディングを見つけるにはどうすればよいですか?

私の Java アプリケーションでは、TIBCO RV メッセージをバイトとしてファイルにアーカイブしています。

メッセージを再生する小さなユーティリティ アプリを作成しています。このようにして、ファイルを解析してオブジェクトを手動で構築することなく、バイトから TibrvMsg オブジェクトを作成することができます。

私が抱えている問題は、Linux ボックスで作成されたファイルを読み取っていて、Windows マシンでアプリを実行しようとしていることです。ファイルが書き込まれた文字セットが異なるため、エラーが発生します。

今、私がやりたいことは、各メッセージを特定の文字セット (UTF-8) でログに記録することです。これにより、再生アプリを実行するプラットフォームを気にしなくなります。アプリは、事前に知っているファイルを読み込むだけです。ファイルが書き込まれる文字セット。バイトをある文字セットから別の文字セットに変換するために、これに java.nio パッケージを使用することを計画しています。

変換を行うために、TIBRV メッセージのバイトがエンコードされている文字セットを知る必要がありますか? もしそうなら、どうすればこれを見つけることができますか?

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

java - 独自のSelectableChannelを定義するにはどうすればよいですか?

新しいタイプ(シリアルポートなど)をどのように定義しjava.nio.channels.SelectableChannelますか?

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

java - SSLEngine とクローズ

SSL で使用されるチャネルからクリーンなデータを取得し、暗号化されたデータをそこに書き込むことができるヘルパー モジュールを実装しました。私には、「DataProvider はインターフェースであるべきだ」と ;)):

SSL の抽象基本クラスを実装しました。その実装のテスト中に、私は 2 つの関数を作成しました。1 つは SocketChannel でメッセージを受信し、データの送信に使用される SSLSocket は接続を閉じます。もう 1 つは、SocketChannel でメッセージを送信し、それで終了を開始します。さて、問題は、これらの手順を実行しても、データの受信に使用される SSLSocket が閉じないことです。

  1. engine.closeOutbound()
  2. エンジン.ラップ()
  3. channel.write(data) (はい、wrap() で取得したすべてのデータを送信したと確信しています)
  4. 受信 close_notify を読み取るためのチャネルの選択

問題は、セレクターが 4 番目のステップでスタックしていることです。

他のテスト (SSLSocket が接続を閉じる) では、問題はありません。

shouldClose を次のように実装したことに注意してください。

したがって、クローズを初期化したとしても、クローズするには着信 close_notify が必要です (これが正しいかどうかはわかりません: 最終的には で変更できますreturn engine.isOutboundDone())

これは、コードの SSLSocket 側です。

最後のアサートに違反しています。

最初は、これは toRead に関連付けられた「バックグラウンド」スレッドがないためだと考えていたので、着信を消費してclose_notifyから最終的にソケットを閉じるために読み取り/書き込みを行う必要がありますが、それでもそうではありませんヘルプ。

何か案が?

0 投票する
10 に答える
26216 参照

java - Java 大容量ファイルのディスク IO パフォーマンス

ハードディスクに 2 つのファイル (それぞれ 2GB) があり、それらを相互に比較したいと考えています。

  • Windows エクスプローラーで元のファイルをコピーするには、約 10 分かかります。2 ~ 4 分 (つまり、同じ物理ディスクと論理ディスクでの読み取りと書き込み)。
  • 2 回読み取りjava.io.FileInputStream、バイト単位でバイト配列を比較するには、20 分以上かかります。
  • java.io.BufferedInputStreamバッファが 64kb の場合、ファイルはチャンクで読み取られてから比較されます。
  • 比較が行われるのは、次のようなタイトなループです

    /li>

これをスピードアップするにはどうすればよいですか? NIO は通常のストリームよりも速いはずですか? Java は DMA/SATA テクノロジを使用できず、代わりに遅い OS-API 呼び出しを行いますか?

編集:
答えてくれてありがとう。それらをもとに実験を行いました。アンドレアスが示したように

流れやnioアプローチに大きな違いはありません。
さらに重要なのは、正しいバッファ サイズです。

これは私自身の実験で確認されています。ファイルは大きなチャンクで読み取られるため、追加のバッファー ( BufferedInputStream) でさえ何も提供しません。比較の最適化は可能で、32 倍の展開で最良の結果が得られましたが、比較にかかる時間はディスク読み取りに比べて小さいため、高速化はわずかです。どうしようもないですね(-_-;)

0 投票する
5 に答える
18291 参照

java - Java コードを使用して画像許可モードを 777 に変更するには?

Java コードを使用して、画像ファイルに許可モード値「777」を付与したいと考えています。Javaを使用してそれを与えるにはどうすればよいですか? デフォルトの許可モード「664」では画像を削除できないためです。

0 投票する
3 に答える
5574 参照

java - Process stdoutInputStreamをNIOByteBufferに読み込むことは可能ですか?

NIOを使用してプロセスからstdoutを処理することは可能ですか?私はそれをjava.ioで動作させていますが、これはNIOについてもう少し学び、パフォーマンスの向上の可能性を探求するための演習のようなものです。

基本的に、大量のテキストをstdoutからバッファにブロックせずにできるだけ速くストリーミングし、後でそのバッファの内容を処理したいと思います。問題は、NIOで動作させるための適切なブードゥーを理解できないようです。これが私が今いるところです:

StreamConsumerクラスは次のようになります。

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

java - java.nio チャネル バッファ ストリーム 用語

java.io と java.nio のバッファ、ストリーム、リーダー、チャネル、セレクターなどの関係を説明するための良い類推 (または、それが失敗した場合は良いリソース) を持っている人はいますか?

ありがとう

0 投票する
3 に答える
3946 参照

java - Java NIO チャネルからの StAX 解析

Java NIO チャネルを介して XML イベントのストリームを受信しようとしています。私はNIOとStAXの両方の解析に慣れていないので、何かを見落としがちです:)

検索の結果、いくつかの SAX および StAX の実装にたどり着きましたが、それらはすべて、NIO チャネルではなく、InputStreams および InputSources で動作するようです。私が行った 2 つの最も近い試みは、チャネルから InputStream を取得し、PipedInputStream を作成することです。

に続く:

上記のコードを方法 1 で使用すると、createXMLStreamReader 行でブロックされます。メソッド 2/3 が使用されると、すぐに IllegalBlockingModeException がスローされます (理由は理解しています)。新しいアプローチが必要かも?

私の目標は、非ブロッキングサーバーを選択する=>クライアントから文字データを受け入れる=>特定のエンコーディングを使用してXMLイベントに解析する=>そのイベントオブジェクトを別のスレッドに転送して処理する=>選択に戻ることです。

だから私は何かを見落としていますか、それとも使用できるより良いアプローチがありますか? もしそうなら何?

ありがとう!