問題タブ [bufferedinputstream]

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 に答える
508 参照

java - 私のコードが JTextArea をリアルタイムで更新できなかったのはなぜですか?

こんにちは、私は Java プログラミングの初心者です。Java から外部コマンドを実行し、コマンド プロンプトの出力を JTextArea に表示しようとしていますin real time。その外部プログラムは毎秒 1 行の出力を生成し、10 秒後に終了します。

以下は私のJavaコードです:

original codes have been deleted to save space after reading Kumra's answer

コマンド プロンプト ウィンドウで program.exe を手動で実行すると、出力は次のようにリアルタイムで更新されます。

上記で Java プログラムを実行すると、JTextArea がリアルタイムで更新され、コマンド プロンプトの出力が表示されると思いました。残念ながら、それは機能していません。実際の出力は次のようになります。

t=0 から t=10 まで、JTextArea は上記の出力でスタックします。t=11 で、完全な出力が突然表示されます。

コードの何が問題なのかを知ることができますか? コマンドプロンプト出力を JTextArea に表示する方法を教えてもらえますin real timeか? ありがとう。

編集 1:
Kumar の回答に基づいてコードを編集しましたが、まだ機能していません。以下は最新のコードです。

MyUI.java

MyThread.java

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

java - Javaを使用してHTMLコンテンツを取得する最速の方法は何ですか?

私はこれを持っていますが、もっと速い方法があるかどうか疑問に思いました:

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

java - SSLソケットとJava7を使用しているときに、サーバーから送信された2番目のメッセージをクライアントが読み取れないのはなぜですか。

Java 7およびSSLソケットを使用すると、不可解な問題が発生します。

クライアント/サーバーバンドルがあります。どちらも、非常に単純なプロトコルを使用してXMLデータを相互に送信します。各メッセージの最初の4バイトには、常にメッセージ全体の長さが含まれます。つまり、XMLデータの長さに4バイトを加えたものです。

最初に、クライアントはサーバーにグリーティングメッセージを送信します。次に、サーバーはグリーティングを解釈して応答を送信します。次に、クライアント自体がそのメッセージを解釈し、ログイン情報を送信します。サーバーはその情報をチェックし、応答を送り返します。ただし、今回は、サーバーからグリーティング応答を取得する場合とまったく同じ方法を使用しますが、クライアントは何も受信しません。

これは、クライアント側の簡略化された読み取り方法です。

そしてここで最初の4バイトから長さを取得するメソッド...

2番目の応答をクライアントが読み取る必要がある場合、にinputBufferはゼロのみが含まれます([0, 0, 0, 0, 0, 0, ...])。したがって、を使用してメッセージの長さを計算しようとするとreadMessageLength()、が返されます-4。もちろん、それは例外につながります。

サーバーによって送信されたデータがまだクライアントによって読み取られる準備ができていないことは明らかなようです。したがって、私はいくつかの変更を加えました:

しかし、それもうまくいきませんでした。そして今、不可解な部分が来ます:何が起こるかというと、このループは2回実行されます!現在割り当てられている値messageLengthは、XMLデータの最初の4バイトから取得されます。reading-methodによって返される文字列は、で始まります?xml。ここで、<が欠落しています。

そこで、最初のバイトをマークしてリセットしようとしました。inputBuffer.mark(4);

しかし、それは実際には無限ループです。内容はinputBuffer決して変わらないので、。messageLength以外になることはありません-4

クライアントに送信されたデータが利用可能であることをいつ確認できますか?どうすれば確認できますか?より良いアプローチは何でしょうか?

よろしく、ウォルター

PS available()メソッドは、SSLソケットを使用すると常にゼロを返すように見えるため、役に立ちません。

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

java - BufferedInputStream.available() はソケットプログラミングで信頼できますか?

available()Javaでのソケットプログラミングでの使用は信頼できますか?

読み取りメソッドを呼び出すときにブロックされないように、読み取りに使用できるバイトがあるときにそれが通知されるようにするだけです。

BufferedInputStream.available()に依存しInputStream.available()ます。

InputStream.available() のドキュメントには、次のように書かれています。

InputStream の一部の実装はストリーム内の合計バイト数を返しますが、多くはそうではないことに注意してください。このメソッドの戻り値を使用して、このストリーム内のすべてのデータを保持するためのバッファーを割り当てることは決して正しくありません。 http://docs.oracle.com/javase/6/docs/api/java/io/InputStream.html#available()

正しいバイト数が得られるかどうかは気にしませんが、読み取り可能なバイトがある場合に 0 が返されないだけです。BufferedInputStream.available() が Windows と Linux でこの目的のために常に機能するかどうかを知りたいです。

また、ドキュメントの「実装」が何を意味するのかわかりません。それは何を指していますか?InputStream のサブクラスに? 異なるオペレーティング システムで Java するには? 異なる JVM に?

Windows、Linux、またはその他のシステムで available() を使用して、機能しなかった人はいますか?

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

android - 「Activity.openFileOutput("myFile", Context.MODE_PRIVATE);」を使用すると、どのディレクトリにファイルが保存されますか? 保管するには?

Androidアプリでリモートsqlite .dbファイルを保存するこのコードがあります:

私は sqlitemanager でそのファイルを開く必要があり、アセットから .db ファイルを開くこの関数がありますが、このメソッドを適応させて、アセットに保存されていない前述の方法で保存したファイルをロードする必要がありますフォルダ。したがって、この方法を変更する必要がありますが、正しく行う方法がわかりません。

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

java - FTPプロトコルを使用してInputStreamの読み取りを再開する方法

私はJavaOOPを学んでいます。私のプログラムはFTP経由でファイルをダウンロードします。再開したらダウンロードを再開したい。これが私のコードです:

最初は、以前にダウンロードしたファイルの長さと同じくらいそれを読み取ってみて、それからその時点から読み取りと書き込みを再開しました。ダウンロードを再開する前にファイルを読み取るのに時間がかかりすぎます(100MBの場合は1〜2分)。その後、スキップ方法があることに気づきましたが、ほぼ同じ時間がかかるので、同じことをしていると思います。

ファイルの特定のバイトからファイルの読み取りを開始するより速い方法はありますか?それとも私はこれを別の方法で行う必要がありますか?それともこれが唯一の方法ですか?

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

java - 行末 ''\n' を読み取らないのはなぜですか

このコードは、ファイルを読み取ってから出力ファイルに戻そうとしています。それを(反転せずに)書き込むと、出力は同じです。しかし、逆にすると、出力は出力ファイルの 1 行にすべて書き込まれます。

私は使用BufferedInputStreamしていますBufferedOutputStream

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

c# - 入力ストリームは有効なバイナリ形式ではありません

「データストア」を逆シリアル化して、Typのリストを取得したいと思います。まず、XMLSerializerを使用してXMlでこれらを作成したいのですが、彼はインターフェイス、抽象クラス、およびTypsが好きではないようです...しかし回避策がないため、メインコンテンツをXMLクラスに保存する必要があります。

そして、私のTypsをSimpleクラスに保存します。

すべてを保存する限り、これは機能すると思います。「LoadFromBinary」がいくつかのエクスペションをスローするという小さな問題がなければ、これも機能すると思います-.-

Expeption:

助けのためのThxベンソン:-)

0 投票する
4 に答える
15938 参照

java - 最小限の時間でJavaで入力ストリームを複製する方法

作成時間をできるだけ少なくして、入力ストリームを複製する方法を教えてもらえますか? IS を処理する複数のメソッドに対して、入力ストリームを複数回複製する必要があります。3 つの方法を試しましたが、何らかの理由でうまくいきません。

方法 #1: stackoverflow コミュニティのおかげで、次のリンクが役立つことがわかり、プログラムにコード スニペットを組み込みました。

InputStream のクローンを作成する方法は?

ただし、このコードを使用すると、複製された入力ストリームを作成するのに最大 1 分 (10MB のファイルの場合) かかる場合があり、私のプログラムはできるだけ高速である必要があります。

方法 #2: BufferedInputStream を使用して IS のクローンも試しました。これは高速でした (最も遅い作成時間 == 1 ミリ秒、最も速い == 0 ミリ秒)。しかし、処理する is1 を送信した後、is2 および is3 を処理するメソッドは、処理するものが何もないというエラーをスローしました。これは、以下の 3 つの変数すべてが同じ IS を参照しているようなものです。

方法 #3: コンパイラが嘘をついていると思います。上記の 2 つの例では、is1 の markSupported() を確認しました。true が返されたので、実行できると思いました

あるいは単に

IS をそれぞれのメソッドに渡す前に。上記の両方の例で、無効なマークであるというエラーが表示されます。

私は今アイデアがありませんので、あなたが私に与えることができる助けを事前に感謝します.

PS 人々から受け取ったコメントから、私の状況に関していくつかのことを明確にする必要があります: 1) このプログラムは VM で実行されています 2) 入力ストリームは別のメソッドから渡されています。ローカル ファイルから読み取っていません 3) 入力ストリームのサイズが不明です

0 投票する
4 に答える
6641 参照

java - Javaでデータをコピーするより速い方法は?

サーバーからデータをコピーするタスクが与えられました。私はBufferedInputStreamデータをコピーするためにストリームを使用して出力しており、バイトごとにそれを行っています。実行中ですが、データの一部が100 MBであるため、データのコピーに時間がかかるため、確実に機能しません。私のコードが数百MBのファイルをコピーできるように、誰かが私にバイトごとのコピーの代替案を提案できますか?バッファは2048です。

これが私のコードがどのように見えるかです: